1

我正在开发一个 ISAPI 过滤器,以从响应中去除某些内容。在进行处理之前,我需要收集响应的所有主体,因为我正在剥离的内容可能会与发送缓冲区重叠。

为此,我想缓冲每个SF_NOTIFY_SEND_RAW_DATA通知的响应内容,直到我到达最后一个,然后发送翻译后的数据。我想知道确定哪个SF_NOTIFY_SEND_RAW_DATA实际上是最后一个的最佳方法。如果我等到SF_NOTIFY_END_OF_REQUEST通知,那么我不知道如何发送我缓冲的数据。

一种方法是使用内容长度。这需要我检测到标题的结尾。它还需要假设 content-length 标头是正确的(可以保证吗?)。由于 HTTP 甚至不需要 content-length 标头,我什至不确定它是否会一直存在。似乎应该有一个更简单的方法。

我假设响应没有被分块,所以在我做响应更改之前我没有处理去分块。另外,当我对响应体进行修改时,响应体的大小不会改变,所以我不需要回去更新内容长度。

4

1 回答 1

1

我最终通过谷歌找到了一些很好的讨论。

这篇文章回答了我的问题,并提出了更复杂的过滤器必须解决的问题: http ://groups.google.com/group/microsoft.public.platformsdk.internet.server.isapi-dev/browse_thread/thread/ 85a5e75f342fad2b/cbb638f9a85c9e03?q=HTTP_FILTER_RAW_DATA&_done=%2Fgroups%3Fq%3DHTTP_FILTER_RAW_DATA%26start%3D20%26&_doneTitle=返回+搜索&&d&pli=1

我拥有的过滤器将完整的请求缓冲到自己的缓冲区中,然后使用 SF_NOTIFY_END_OF_REQUEST 发送内容。修改它不会改变大小,并且排除了响应被分块的可能性,所以在我的情况下过滤器相对简单。

于 2009-03-06T17:23:11.587 回答