我启用了静态和动态压缩的IIS 7.5。它似乎适用于动态文件,但对于静态文件,它的行为不正常,通常在内容未压缩时发送http标头“Content-Encoding: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模块正在解压缩管道中的某些内容,但它们似乎都不可疑。有什么想法吗?
答案 0 :(得分:2)
尝试在默认禁用的缓存之前启用动态压缩。
<urlCompression dynamicCompressionBeforeCache="true" doDynamicCompression="true" doStaticCompression="true" />
答案 1 :(得分:2)
我在调查中发现在静态文件上使用HttpContext.RewritePath()会导致此问题。
答案 2 :(得分:0)
我花了一段时间才弄明白这一点。在applicationHost.config文件中的system.webServer / serverRuntime节点上将frequentHitThreshold属性设置为1应该可以解决问题,如http://www.iis.net/ConfigReference/system.webServer/serverRuntime中所述。
您可以通过以管理员身份执行以下命令来执行此操作:
%windir%\system32\inetsrv\appcmd set config /section:serverRuntime /frequentHitThreshold:1 /commit:apphost
一句警告 - 经常发生的事情&#34;概念似乎并不特定于压缩。我不知道设置这个是否会产生其他后果!