IIS7中的GZip压缩无法正常工作,但内容编码头设置为gzip

时间:2011-08-01 21:43:06

标签: iis iis-7 compression http-headers gzip

我启用了静态和动态压缩的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模块正在解压缩管道中的某些内容,但它们似乎都不可疑。有什么想法吗?

3 个答案:

答案 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;概念似乎并不特定于压缩。我不知道设置这个是否会产生其他后果!