【发布时间】:2011-03-25 15:51:33
【问题描述】:
我有一个 HttpModule,用于动态压缩来自 ASP.NET (MVC3) Web 应用程序的内容。该方法与this article 中的 CompressionModule 非常相似(其中模块将 GZip 过滤器应用于 HttpResponse 并设置正确的 Content-encoding 标头)。
出于某种原因,这需要在经典模式下运行,而不是集成管道模式。
我遇到的问题是,在某些启用了 IIS 压缩的服务器上,IIS 会压缩内容,然后我的模块会对其进行压缩。
结果是我将内容压缩了两次,并带有编码:
Content-encoding: gzip,gzip
一个来自 IIS,一个来自我的代码中的这一行:
httpResponse.AppendHeader("Content-encoding", "gzip");
有谁知道一种方法,在经典模式下,我可以检查内容是否已经压缩,或是否在服务器上启用了压缩,以绕过我自己的压缩?
在流水线模式下,这个检查很简单
if (httpResponse.Headers["Content-encoding"]!= null)
{
return;
}
即检查是否有任何东西已经设置了内容编码,如果是,什么也不做。
但是,我在经典模式下被难住了。不幸的是,经典模式下不允许访问HttpResponse.Headers,所以我无法进行障碍检查。
感谢所有想法。
【问题讨论】:
-
我认为你只能在经典模式下通过 ISAPI 模块来做到这一点。