我正在开发一个 ISAPI 过滤器,以从响应中去除某些内容。在进行处理之前,我需要收集响应的所有主体,因为我正在剥离的内容可能会与发送缓冲区重叠。
为此,我想缓冲每个SF_NOTIFY_SEND_RAW_DATA
通知的响应内容,直到我到达最后一个,然后发送翻译后的数据。我想知道确定哪个SF_NOTIFY_SEND_RAW_DATA
实际上是最后一个的最佳方法。如果我等到SF_NOTIFY_END_OF_REQUEST
通知,那么我不知道如何发送我缓冲的数据。
一种方法是使用内容长度。这需要我检测到标题的结尾。它还需要假设 content-length 标头是正确的(可以保证吗?)。由于 HTTP 甚至不需要 content-length 标头,我什至不确定它是否会一直存在。似乎应该有一个更简单的方法。
我假设响应没有被分块,所以在我做响应更改之前我没有处理去分块。另外,当我对响应体进行修改时,响应体的大小不会改变,所以我不需要回去更新内容长度。