确定ISAPI过滤器的响应长度

时间:2009-03-06 03:08:47

标签: isapi

我正在使用ISAPI过滤器来删除响应中的某些内容。在进行处理之前,我需要收集响应的所有内容,因为我正在剥离的内容可能会重叠发送缓冲区。

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

一种方法是使用内容长度。这需要我检测标题的结尾。它还需要假设内容长度标题是正确的(保证?)。由于HTTP甚至不需要内容长度标头,我甚至不确定它是否总是在那里。似乎应该有一种更简单的方法。

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

1 个答案:

答案 0 :(得分: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=Back+to+Search&&d&pli=1

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