0

我正在为 IIS6 构建一种 http 嗅探器,因为我同时使用了 ISAPI 过滤器和 ISAPI 扩展。扩展 - 读取请求。过滤器 - 读取响应。

我使用扩展的原因是我不想强迫用户更改为 IIS5 兼容模式,因此无法订阅 SF_NOTIFY_READ_RAW_DATA。

问题是,当我读取响应时,我想将它链接到请求,所以我需要给请求一个唯一的标识符,并在读取响应时使用它。

我读过曾经有一个选项可以使用 SF_REQ_GET_CONNID 调用 ServerSupportFunction,但 IIS6 不支持。

此外,我读过一个可能的解决方案是附加客户标头,然后将其删除 - 这可能会起作用,但似乎不如我希望实现的优雅。

有什么方法可以在过滤器中获取连接 ID(EXTENSION_CONTROL_BLOCK 中的 connID)?

感谢您的回复,萨吉夫

4

1 回答 1

1

几个月前我遇到了同样的问题。

我做了以下事情来解决这个问题:

  1. 在 HttpFilterProc(ISAPI 过滤器)上,我寻找通知 SF_NOTIFY_PREPROC_HEADERS。
  2. 然后,我将自己的带有 GUID 的标头注入到请求中。
  3. 在 HttpExtensionProc(ISAPI 扩展)上,我阅读了我的标题并提取了 GUID。
  4. 然后我阅读了请求内容并将其与 GUID 连接起来。
  5. 在 OnSendRawData(ISAPI 过滤器)上,我读取(分块)响应内容并再次将其与 GUID 连接。

这样我就有了请求内容(来自扩展)和响应内容(来自过滤器)链接!

于 2012-04-01T11:45:14.027 回答