GZip压缩在IIS 7.5上无法正常工作

时间:2011-08-04 09:04:36

标签: .net asp.net iis gzip iis-7.5

我正在尝试为IIS下的静态文件支持GZip压缩(默认情况下应启用但不启用)但到目前为止还没有工作。这是Web应用程序的web.config文件中<system.webServer>节点下的部分;

<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/json" 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>

<urlCompression doStaticCompression="true" />

我尝试使用谷歌浏览器。这是请求标题;

  

接受:text / html的,应用/ XHTML + xml的,应用/ XML; Q = 0.9, / 的; Q = 0.8

     

接收字符集:ISO-8859-1,utf-8; Q = 0.7,*; Q = 0.3

     

接受编码:gzip,放气,SDCH

     

接受语言:EN-US,EN; Q = 0.8

     

缓存控制:无缓存

     

连接:保活

     

主持人:我-网站网址

     

杂注:无缓存

     

User-Agent:Mozilla / 5.0(Windows NT 6.0)AppleWebKit / 534.30(KHTML,   像Gecko)Chrome / 12.0.742.122 Safari / 534.30

这些是响应标题;

  

接受-范围:字节

     

的Content-Length:232651

     

内容类型:应用程序/ x-JavaScript的

     

日期:2011年8月4日星期四08:58:19 GMT

     

的ETag: “a69135734a50cc1:0”

     

Last-Modified:Mon,01 Aug 2011 12:56:37 GMT

     

服务器:IIS / 7.5

     

X供电-通过:ASP.NET

我检查了applicationHost.config文件并找到了一些如下节点;

----

<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />

----

<section name="urlCompression" overrideModeDefault="Allow" />

----

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
    <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>

----

<urlCompression />

我在这里缺少什么?

7 个答案:

答案 0 :(得分:39)

经过大量搜索,我终于找到了什么压缩工作在我的IIS 7.5上。 首先,IIS不会压缩文件,除非它经常加载。这提出了一个问题“IIS经常考虑什么?”嗯,默认值是每10秒2次。糟糕!

可以在web.config中更改此设置,但需要先在applicationHost.config中解锁该部分。以下是命令:

首先解锁该部分:

  

C:\ Windows \ System32 \ inetsrv \ appcmd.exe解锁配置   /section:system.webServer/serverRuntime

     

配置路径“MACHINE / WEBROOT / APPHOST”处的未锁定部分“system.webServer / serverRuntime”。

完成后,编辑web.config文件并添加serverRuntime元素:

  

&lt;?xml version =“1.0”encoding =“UTF-8”?&gt;
  &lt;结构&GT;
  &LT; system.webServer&GT;
  &lt; serverRuntime frequentHitThreshold =“1”frequentHitTimePeriod =“10:00:00”/&gt;
          ...

在这种情况下,我将其设置为在10小时内点击一次文件。您可以根据需要调整值。这是解释serverRuntime元素的文档:

http://www.iis.net/configreference/system.webserver/serverruntime

我希望这有助于您的压缩工作。

注意:您还可以在applicationHost.config文件中设置serverRuntime元素,但我选择在web.config中更改它,因为我们有许多服务器和具有各种站点的服务器场,它是我更容易从这种粒度级别控制它。

答案 1 :(得分:28)

要记住的一件事是,第一个命中通常会立即返回未压缩,但会旋转一个线程以在后台压缩文件,以便为将来的请求提供压缩服务。

另外,您是否尝试过使用其他客户端(例如IE)?

答案 2 :(得分:13)

确保在服务器上安装Dynamic Compression。在IIS下添加/删除功能。

答案 3 :(得分:7)

以下配置对我有用。只需使用下面给出的内容替换applicationHost.config中的httpCompression部分,然后重新启动IIS。那就是!!!

  <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files"
    staticCompressionDisableCpuUsage="95" staticCompressionEnableCpuUsage="60"
    dynamicCompressionDisableCpuUsage="95" dynamicCompressionEnableCpuUsage="50">
    <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="*/*" enabled="false" />
      <add mimeType="application/json" enabled="true" />
      <add mimeType="application/json; charset=utf-8" enabled="true" />
    </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="application/json" enabled="true" />
      <add mimeType="application/json; charset=utf-8" enabled="true" />
      <add mimeType="*/*" enabled="false" />
    </staticTypes>
  </httpCompression>

配置完成后,我得到了下面的Headers响应,表明数据是使用gzip压缩压缩的

Cache-Control → no-cache
Content-Encoding → gzip
Content-Length → 4202
Content-Type → application/json; charset=utf-8
Date → Wed, 22 Jul 2015 07:40:17 GMT
Expires → -1
Pragma → no-cache
Vary → Accept-Encoding
X-Powered-By → ASP.NET 

以上配置适用于整个IIS。如果要为单个网站配置此项,请替换

<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />

<section name="httpCompression" overrideModeDefault="Allow" />

在applicationHost.config中,而不是替换applicationHost.config中的httpCompression部分,将其添加到您网站的web.config中的system.webServer标记下

另外,请确保为数据指定了正确的MIME类型。在我的情况下,它是在JSON中,所以我使用下面的配置

<add mimeType="application/json" enabled="true" />
<add mimeType="application/json; charset=utf-8" enabled="true" />

答案 4 :(得分:6)

我花了一段时间才弄明白这一点。在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

警告 - “频繁命中”概念似乎并不特定于压缩。我不知道设置这个是否会产生其他后果!

答案 5 :(得分:1)

“system.webServer配置不允许网站级别的httpCompression” https://serverfault.com/questions/125139/iis7-dynamic-compression-not-success-reason-12

为什么使用配置文件?只是尝试使用一些超过2700字节的txt文件创建新的虚拟网站。您也可以尝试安装动态压缩模块并为服务器ant打开这个虚拟站点。

答案 6 :(得分:1)

我们发现的一件事是我们的Azure网站因为运行了高资源WebJob而达到了最大CPU使用率。我们尝试了上面的所有设置,没有任何效果。然后我们检查了资源CPU的使用情况,发现它是80%+。在80%的CPU负载下,gzip停止工作!