C 如何删除ISAPI筛选器中的标头?

C 如何删除ISAPI筛选器中的标头?,c,windows,isapi,C,Windows,Isapi,ISAPI过滤器文档说我可以调用发送响应头,还可以附加附加头 ISAPI还必须允许过滤器添加额外的头,以便在对客户端的响应中发送 在ISAPI中,有没有一种方法可以删除原本会发送到客户端的头文件?或者以某种方式要求ISAPI运行时从响应中排除某些头? ISAPI运行时似乎总是包含一个Server:header,我想找到一种方法来删除它 我知道我可以在IIS管理器中以管理方式设置或取消设置头,但这并不是我想要的。我希望在运行时在过滤器中以编程方式和有条件地执行此操作 编辑:BUMP。我已经编写了几

ISAPI过滤器文档说我可以调用发送响应头,还可以附加附加头

ISAPI还必须允许过滤器添加额外的头,以便在对客户端的响应中发送

在ISAPI中,有没有一种方法可以删除原本会发送到客户端的头文件?或者以某种方式要求ISAPI运行时从响应中排除某些头? ISAPI运行时似乎总是包含一个Server:header,我想找到一种方法来删除它

我知道我可以在IIS管理器中以管理方式设置或取消设置头,但这并不是我想要的。我希望在运行时在过滤器中以编程方式和有条件地执行此操作


编辑:BUMP。

我已经编写了几个ISAPI,包括一个具有您描述的功能的ISAPI。我使用了SF_NOTIFY_SEND_RAW_DATA-我相信第一个调用将是标头,因此您可以使用:

FilterContext->ServerSupportFunction(FilterContext,SF\u请求\u禁用\u通知,0,SF\u通知\u发送\u原始数据,0)

禁用未来原始数据的通知。然后在HTTP_FILTER_RAW_数据结构中,您得到了pvInData,它是当前的头,我读入它,然后将它写入我分配的新HTTP_FILTER_RAW_数据中(记住对结构和pvInData都使用FilterContext->AllocMem)。完成后,将新标题写出FilterContext->WriteClient并返回SF\u STATUS\u REQ\u READ\u NEXT

此外,在初始化时,确保将SF_NOTIFY_ORDER_设置为HIGH,并将SF_NOTIFY_SEND_RAW_数据设置为SEND_


通过查看我的旧代码,我就是这么做的,它专门删除了一个头(加上它还添加了一个),因此它肯定会执行您需要执行的操作。我要说的唯一警告是,我记得一些与原始数据相关的变化,从IIS5(当我写这篇文章时)到IIS6+,但我从未需要更新这个特定的ISAPI,所以我不知道是否有机会影响它的实现。希望这对你有所帮助,尽管你的问题可能至少有一个风滚草

我用这段代码重写标题(Firefor不呈现HTML b/c无内容类型标题)

DWORD CMyAuthFilterImpl::OnSendRawData(PHTTP_FILTER_CONTEXT pfc, DWORD NotoficationType, LPVOID pvNotification)
{
SF_STATUS_TYPE retStatus =  SF_STATUS_REQ_NEXT_NOTIFICATION;

if(m_bWriteHeader)
{
    //rewriting response headers with correct information
    pfc->ServerSupportFunction(pfc, SF_REQ_DISABLE_NOTIFICATIONS, 0, SF_NOTIFY_SEND_RAW_DATA, 0);

    PHTTP_FILTER_RAW_DATA pSD = (PHTTP_FILTER_RAW_DATA)pvNotification;
    DWORD dL = (DWORD)m_pszHeaders.length();
    pSD->pvInData = pfc->AllocMem(pfc, dL, 0);

    memcpy(pSD->pvInData, (void*)m_pszHeaders.data(), dL);
    pSD->cbInData = dL;

    m_bWriteHeader=FALSE;

    m_dwordHeaderLength=0;
    m_pszHeaders.~basic_string();
    retStatus =  SF_STATUS_REQ_NEXT_NOTIFICATION;

}


return retStatus;
}