设置IIS7的gzip压缩级别

7
在ASP.NET MVC中,我使用web.config来启用和配置IIS7.5 gzip压缩设置。但是它们的压缩级别设置似乎没有任何效果:
<scheme name="gzip" dynamicCompressionLevel="9" staticCompressionLevel="9"/>

将两个设置的压缩级别都设为0时,我的主页被gzip压缩为9,290字节(从39,623字节)。

将两个设置的压缩级别都设为9时,我的主页被gzip压缩为9,290字节(从39,623字节)。

(使用Fiddler检查压缩/未压缩大小)

压缩量没有任何差异-为什么?这发生在我本地开发机器上-Windows 7。我还没有在我们的Win 2008 Web服务器上尝试过。

Web.config中的完整压缩设置:

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
  <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" dynamicCompressionLevel="10" staticCompressionLevel="10"/>
  <dynamicTypes>
    <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="application/xml" 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="application/xml" enabled="true"/>
    <add mimeType="*/*" enabled="false"/>
  </staticTypes>
</httpCompression>
<urlCompression doStaticCompression="true" doDynamicCompression="true"/>

编辑:显然,最高级别是9。这个页面说是10,但一定是错误的http://www.iis.net/configreference/system.webserver/httpcompression/scheme。即使使用第9级别,问题仍然存在。

3个回答

2
请确保您已安装动态压缩
接下来,您可以尝试覆盖一些压缩默认值,其中dynamicCompressionDisableCpuUsage设置为90%,只有在低于默认值dynamicCompressionEnableCpuUsage(默认为50%)时才会再次启用压缩。我建议提高后者的值。
在此类问题中,也建议使用故障请求跟踪,这可能有助于发现问题,如多个SO上的一些地方所建议的那样。
以下是一些详细的回答: 如何在IIS7中启用gzip压缩? 压缩无法正常工作 更新:
该设置可能被锁定在应用程序级别,因此您应尝试运行以下命令:
appcmd set config -section:urlCompression /doDynamicCompression:true

如果这仍然是一个问题,调整minFileSizeForComp可能值得尝试,其默认值已经随着后来的IIS版本增加
根据评论,也可以尝试先使用动态内容,而在试图解决问题时不要使用静态内容。

抱歉我没有回答这个问题,尽管它一直困扰着我。动态压缩已经安装并且在工作中。但是更改压缩级别却不行。 - JK.
@JK 你尝试过将静态压缩设置为false,只使用动态压缩吗?我已经更新了答案并提供了其他建议。 - dove

1

如果您的主页不是动态生成的,则dynamicCompressionLevel不会产生任何影响。

由于静态压缩默认已启用,因此可能已经有您的主页的压缩版本被缓存。您可以尝试简单地修改您的主页(例如只更改一个字符)。它应该会使用新设置进行重新压缩。

默认的静态压缩级别可能已经达到了9级。如果没有看到变化,您也可以尝试将静态级别降低到1以查看是否有差异。

您可能需要提供DLL:

<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" />

似乎动态压缩模块不仅限于动态内容。在我的测试中,只要静态内容与其MIME类型列表匹配且未被压缩,它就可以进行压缩。应该将其理解为“动态压缩模块”,即每次请求都会触发的模块。而静态模块则像后台进程一样在文件上工作,并且只有在将它们缓存后才开始提供压缩输出。 - Frédéric

0
你的MVC管道中是否包含压缩过滤器?
如果是,它将优先于IIS动态压缩模块。该模块上的设置对你的MVC页面没有影响,因为IIS动态压缩模块不会尝试压缩已经进行了http压缩的输出。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接