c - 如何删除 ISAPI 过滤器中的 header ?

标签 c windows isapi

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/

相关文章:

C99:从堆中释放后返回一个值

c - 将 fmemopen ed 文件描述符设置为子进程的标准输入

multithreading - Delphi WebBroker/ISAPI 与线程

asp.net-mvc - 为什么我可以从 MVC 应用程序中删除 ExtensionlessUrlHandler 而没有任何不良影响?

python - 在 Atom 代码编辑器中运行代码

apache - 在 Apache 上调用 GetFilterVersion 到 Tomcat Redirector ISAPI 过滤器时出错 - 32 位 W2K8 SP2 标准

c - 我用 c 创建了一个程序,它打印出一条语句,然后几秒钟后它被清除并替换为新的打印语句

c++ - c/c++ 库存位图使用十六进制字母并转换回来

windows - 将文本从 Windows CMD 窗口复制到剪贴板

windows - 使用 WinDBG 从调用堆栈中查找 URL