ISAPI 过滤器文档说我可以调用 SF_REQ_SEND_RESPONSE_HEADER发送响应 header ,并附加其他 header 。
ISAPI 还有AddResponseHeaders允许过滤器添加要在响应中发送给客户端的其他 header 。
在 ISAPI 中,有没有办法删除否则会发送给客户端的 header ?或者通过某种方式要求 ISAPI 运行时从响应中排除某些 header ? ISAPI 运行时似乎总是包含一个 Server: header ,我想找到一种方法来删除它。
我知道我可以在 IIS 管理器中以管理方式设置或取消设置 header ,但这并不是我想要的。我想在运行时以编程方式和有条件地在过滤器中执行此操作。
编辑:BUMP。
最佳答案
我已经编写了多个 ISAPI,包括具有您描述的功能的一个。我使用了 SF_NOTIFY_SEND_RAW_DATA - 我相信第一个调用将是标题,因此您可以使用:
FilterContext->ServerSupportFunction(FilterContext, SF_REQ_DISABLE_NOTIFICATIONS, 0, SF_NOTIFY_SEND_RAW_DATA, 0);
禁用 future 原始数据的通知。然后在 HTTP_FILTER_RAW_DATA 结构中你有 pvInData,它是当前 header ,我读入然后将它写入我分配的新 HTTP_FILTER_RAW_DATA(记住对结构和 pvInData 使用 FilterContext->AllocMem)。完成后,将新 header 写入 FilterContext->WriteClient 并返回 SF_STATUS_REQ_READ_NEXT。
此外,在初始化时确保设置 SF_NOTIFY_ORDER_HIGH 和 SF_NOTIFY_SEND_RAW_DATA。
通过查看我的旧代码,这就是我所做的,它专门删除了一个 header (加上它还添加了一个),因此它肯定会执行您需要做的事情。我要说的唯一警告是我记得从 IIS5(当我写这篇文章时)到 IIS6+ 与 RAW_DATA 相关的一些变化,但我从来不需要更新这个特定的 ISAPI,所以我不知道是否有机会影响它的完成方式或不是。希望这对您有所帮助,尽管您的问题可能至少有一个风滚草! :)
关于c - 如何删除 ISAPI 过滤器中的 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1140507/