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

我用Google Chrome试了一下。 这里是请求标题;

接受:text / html,application / xhtml + xml,application / 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

caching控制:无caching

连接:保持活跃

主持人:我-网站url

附注:无caching

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

这些是响应头;

接受-范围:字节

内容长度:232651

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

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

ETag的: “a69135734a50cc1:0”

Last-Modified:星期一,01八月2011 12:56:37 GMT

服务器:Microsoft-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 /> 

我在这里错过了什么?

经过大量的search,我终于find了在我的IIS 7.5上压缩的工作。 首先,IIS不会压缩文件,除非它经常加载。 这引出了一个问题:“IIS经常考虑什么?” 那么,默认是每10秒2次。 哎呀!

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

首先解锁部分:

C:\ Windows \ System32 \ inetsrv \ appcmd.exe unlock config /section:system.webServer/serverRuntime

在configurationpath“MACHINE / WEBROOT / APPHOST”中解锁“system.webServer / serverRuntime”部分。

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

<?xml version =“1.0”encoding =“UTF-8”?>
<结构>
<system.webServer>
<serverRuntime frequentHitThreshold =“1”frequentHitTimePeriod =“10:00:00”/>

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

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

我希望这可以帮助你的压缩工作。

注意:你也可以在applicationHost.config文件中设置serverRuntime元素,但是我select在web.config中更改它,因为我们有许多服务器和不同站点的农场,而且我更容易控制它从这个粒度级别。

有一件事要记住,第一个命中通常是立即返回未压缩的,但是为了将来的请求用压缩来响应服务而在后台压缩文件。

另外,你有没有尝试过使用不同的客户端(如IE)?

确保您在服务器上安装了Dynamic Compression。 在IIS下添加/删除function。

花了我一段时间来弄清楚这一点。 将applicationHost.config文件中的system.webServer / serverRuntime节点上的频率上限阈值属性设置为1应该执行此操作,如http://www.iis.net/ConfigReference/system.webServer/serverRuntime中所述; 。

您可以通过以pipe理员身份执行以下命令来执行此操作:

 %windir%\system32\inetsrv\appcmd set config /section:serverRuntime /frequentHitThreshold:1 /commit:apphost 

一个警告的话 – “频繁命中”的概念似乎不是特定于压缩。 由于设置这个,我不知道是否有其他的后果!

以下configuration为我工作。 只需将applicationHost.config中的httpCompression部分replace为下面给出的,然后重新启动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> 

configuration完成后,我得到了下面的头文件,表示数据使用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 

以上configuration适用于整个IIS。 如果您想要为单个网站configuration此function,请更换

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

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

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

另外,请确保您为数据指定了正确的MIMEtypes。 在我的情况是在JSON中,所以我使用下面的configuration

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

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

你为什么使用configuration文件? 只要尝试创build新的虚拟网站与超过2700字节的一些txt文件。 你也可以尝试安装dynamic压缩模块,并打开服务器ant这个虚拟的网站。

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