即使在 applicationHost.config 中允许,gzip 压缩也不起作用
Posted
技术标签:
【中文标题】即使在 applicationHost.config 中允许,gzip 压缩也不起作用【英文标题】:gzip compression not working even though allowed in applicationHost.config 【发布时间】:2014-02-05 01:56:03 【问题描述】:我想为在 ASP.NET4.5 上使用 IIS7.5 运行的网站启用 gzip 压缩,但无法对其进行压缩。
我在共享主机上,所以我不能直接在 IIS 中设置。
applicationHost.config
我将其从 Deny
更改为 Allow
(我在这里读到我不应该更改 allowDefinition
设置:How do you change the allowDefinition section attribute using appcmd in IIS 7?)
<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Allow" />
我网站的 web.config
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll"/>
<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/javascript; charset=utf-8" 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/javascript; charset=utf-8" enabled="true"/>
<add mimeType="*/*" enabled="false"/>
</staticTypes>
</httpCompression>
作为上述的替代方案,我还尝试将其添加到我的 web.config:
<configuration>
<system.webServer>
<urlCompression doStaticCompression="true" doDynamicCompression="false" />
</system.webServer>
</configuration>
我在 Windows 2008 服务器管理器中看到安装了静态内容压缩,但没有安装动态。
然后当我转到 IIS 到我的站点和模块压缩时,我现在看到 Enable Dynamic content compression
已启用(即使显然没有安装)但显示为灰色,并且检查了静态内容压缩。
尽管如此:即使启用了静态和动态内容压缩,我也没有看到使用 Fiddler 进行压缩。
Decode
按钮在 Fiddler 中未启用。我还检查了http://www.whatsmyip.org/http-compression-test/ 和http://www.gidnetwork.com/tools/gzip-test.php
但无论我做什么,当我检查 Fiddler 时,我都没有看到 gzip 压缩:
我已经查看了这些帖子:
http://blog.arvixe.com/how-to-enable-gzip-on-iis7/
Enable IIS7 gzip
【问题讨论】:
您是否浏览过这些关于自动解码的答案以及是否可能与 Port80 等第三方进行检查? ***.com/q/897989/231316 我更新了我的帖子。我也在其他网站上进行了测试。我应该测试哪个 Port80 产品:port80software.com/download? 这是他们在线测试人员的链接:port80software.com/tools/compresscheck.asp?url=Enter+URL 这也表示没有压缩:port80software.com/tools/compresscheck.asp?url=http://… 我尝试访问您的一个 jquery 文件,但我得到了一个未压缩的文件。然后我读了这篇文章 (***.com/a/15626988/231316),它说 IIS 不会压缩某些东西,除非它“经常”访问。于是刷新了一堆,终于在第三次尝试时收到了压缩版。该链接包括一种更改“经常”参数的方法。您的动态内容仍然没有压缩,但您说没有安装。 【参考方案1】:IIS 上的压缩有点不稳定,因为它不会立即执行。 IIS直到内容被频繁点击才会压缩内容,所以在内容被多次点击后最终会出现内容可能看起来没有被压缩。
另外确保您列出的 MIME 类型与您从代码中传回的内容类型完全匹配。
以 JavaScript 为例:
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" />
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="application/javascript" enabled="true" />
<add mimeType="application/javascript; charset=utf-8" enabled="true" />
<add mimeType="application/json" enabled="true" />
<add mimeType="application/json; charset=utf-8" enabled="true" />
<add mimeType="*/*" enabled="false" />
</dynamicTypes>
<staticTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="application/atom+xml" enabled="true" />
<add mimeType="application/xaml+xml" enabled="true" />
<add mimeType="*/*" enabled="false" />
</staticTypes>
</httpCompression>
可能需要。
以下是我几年前写的一篇博文中的更多信息: http://weblog.west-wind.com/posts/2011/May/05/Builtin-GZipDeflate-Compression-on-IIS-7x
还有一个谈到一些听起来与你相似的问题(查看 cmets): http://weblog.west-wind.com/posts/2007/Jun/22/IIS-7-and-JavaScript-Compression-not-working-consistently
【讨论】:
以上是关于即使在 applicationHost.config 中允许,gzip 压缩也不起作用的主要内容,如果未能解决你的问题,请参考以下文章