即使在 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 压缩也不起作用的主要内容,如果未能解决你的问题,请参考以下文章

即使屏幕关闭,如何在后台运行代码?

即使在采取响应操作后,UIAlertView 也不会消失

为啥即使在 System.exit(0) 之后也需要返回;

Tensorflow:即使在关闭会话时内存泄漏?

即使我阻止横向旋转,屏幕也在旋转

Xcode 测试:清理代码,即使停止