IIS7中的GZip压缩不起作用,但内容编码头设置为gzip

问题描述:

我有启用了静态和动态压缩的IIS 7.5。它对于动态文件似乎工作正常,但对于静态文件,它的行为不正常,当内容未被压缩时通常发送http头“Content-Encoding:gzip”。这会导致浏览器尝试解压缩,并抛出无效的幻数错误。下面是我的配置:IIS7中的GZip压缩不起作用,但内容编码头设置为gzip

<httpCompression dynamicCompressionDisableCpuUsage="95" dynamicCompressionEnableCpuUsage="70" > 
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" /> 
    <dynamicTypes> 
    <add mimeType="text/*" enabled="true" /> 
    <add mimeType="application/javascript" enabled="true" /> 
    <add mimeType="application/x-javascript" enabled="true" /> 
    <add mimeType="application/json" enabled="true" /> 
<add mimeType="*/*" enabled="false" /> 
    </dynamicTypes> 
    <staticTypes> 
<add mimeType="text/*" enabled="true" /> 
<add mimeType="message/*" enabled="true" /> 
    <add mimeType="application/javascript" enabled="true" /> 
    <add mimeType="application/x-javascript" enabled="true" /> 
<add mimeType="*/*" enabled="false" /> 
    </staticTypes> 

我认为某些HTTP模块的某处解压内容顺着管道,但他们都不怀疑。有任何想法吗?

尝试在默认禁用缓存之前启用动态压缩。

<urlCompression dynamicCompressionBeforeCache="true" doDynamicCompression="true" doStaticCompression="true" /> 
+1

感谢您的建议。我试图将该行放在下,但它没有任何区别。任何想法? – sboisse

花了我一会儿才弄清楚了。在applicationHost.config文件的system.webServer/serverRuntime节点上将频率上限阈值属性设置为1应该有效,如http://www.iis.net/ConfigReference/system.webServer/serverRuntime所述。

您可以通过以管理员身份执行以下命令来做到这一点:

%windir%\system32\inetsrv\appcmd set config /section:serverRuntime /frequentHitThreshold:1 /commit:apphost 

一个警告 - 在“频打”的概念似乎没有具体的压缩。我不知道是否有其他后果由于设置!

我在调查中发现在静态文件上使用HttpContext.RewritePath()会导致此问题。

+0

这很奇怪,但我也看到这是真实的,至少在我的一台QA服务器(W2K8/IIS 7.5)上。 – rsbarro