如何在IIS7 Native Module中发送标头之前缓冲和处理分块数据

时间:2010-12-08 07:49:28

标签: c++ iis-7

所以我一直在努力将IIS6 ISAPI模块移植到IIS7。我遇到的一个问题是我需要能够解析和处理响应,然后根据内容更改/删除/添加一些HTTP头。我对大多数内容都做得很好,但是当响应体上使用了分块编码时,它似乎会崩溃。

看起来每个块都会调用一次CHttpModule :: OnSendResponse。我已经能够确定何时发送分块响应,并缓冲数据直到所有块都被传入,并将实体计数设置为0以防止它发送该数据,但是在第一个之后OnSendResponse被称为头部已经发送到客户端,因此我在处理好的分块数据之后无法修改它们。

我意识到这样做会消除分块编码的好处,但在这种情况下它是必要的。

我可以为IIS Native Modules找到的唯一示例代码非常简单,并且不会演示对响应数据执行任何过滤。关于此的任何提示或链接都会很棒。

编辑:好的,我找到了IHttpResponse :: SuppressHeaders,它会阻止在第一个OnSendResponse之后发送标头。但是,现在它根本不会发送标题。所以我做的是当它是一个chunked响应我设置它来抑制标题,然后我处理响应后,我检查标题是否被抑制,如果他们是我从原始响应结构读取所有标题(HTTP_RESPONSE),并在响应实体的开头插入它们自己。到目前为止,这似乎工作正常。

如果有人有更好的选择,仍然可以接受其他想法。

0 个答案:

没有答案