如何启用iis 7dynamic内容压缩?

我已经在IIS 7中启用了dynamic内容压缩function,但Fiddler显示我的dynamic页面仍然没有使用内容编码:gzip

静态内容压缩在相同的服务器上正常工作。

不确定是否重要,但大多数dynamic页面是Coldfusion页面(Coldfusion被configuration为ISAPI扩展),我们也使用IIS URL重写模块。

这是从我的applicationhost.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="*/*" enabled="false" /> </dynamicTypes> <staticTypes> <add mimeType="text/*" enabled="true" /> <add mimeType="message/*" enabled="true" /> <add mimeType="application/javascript" enabled="true" /> <add mimeType="*/*" enabled="false" /> </staticTypes> </httpCompression> ... <urlCompression doDynamicCompression="true" /> 

以下是一个示例请求:

 GET / HTTP/1.1 Host: web5.example.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive 

和响应标题:

 HTTP/1.1 200 OK Transfer-Encoding: chunked Content-Type: text/html; charset=UTF-8 Server: Microsoft-IIS/7.0 ... Date: Mon, 22 Feb 2010 20:59:36 GMT 

您可以按照这里提到的疑难解答步骤.. 使用服务帐户在IIS 6和IIS 7中的HTTP压缩

“Content-Endcoding:chunked”不应出现在服务器响应中。 “Chunked”完全是HTTP规范的一个独立部分,“Transfer-Encoding”。 您应该寻找“内容编码:gzip”,可能除了“传输编码:分块”之外。 以下是Google首页的示例:

 HTTP/1.1 200 OK Content-Type: text/html; charset=UTF-8 Date: Wed, 17 Feb 2010 13:43:22 GMT Expires: Wed, 17 Feb 2010 13:43:22 GMT Cache-Control: private, must-revalidate, max-age=0 Last-Modified: Wed, 17 Feb 2010 13:43:22 GMT Server: igfe Transfer-Encoding: chunked Content-Encoding: gzip 

现在,就debugging问题而言,IIS7基于内容types进行压缩。 所以当它看到“Content-Type:text / html”时,会压缩页面。 所以首先,确保脚本返回一个IIS认为可压缩的内容types(text / *)。

此外,IIS不会为HTTP / 1.0请求(由某些代理(如Squid)使用)或标头(它们表示请求来自代理服务器(Via:或X-Forwarded-For :)))的默认页面压缩。 这是一个保守的默认处理大量旧的代理不能正确处理压缩的HTTP内容。 您可以通过编辑IISconfiguration文件(在服务器或站点级别)覆盖此行为。

最后,请确保您的客户端正在请求上发送“Accept-Encoding:gzip”标头。 如果它是一个标准的浏览器,它将默认,但如果你使用wget或其他工具,它可能不会。 您可以使用Fiddler来查看整个HTTP对话,包括标题和数据。

做了一些研究,我发现这表明压缩也需要在ColdFusion端从模板生成HTML时启用。 我找不到确切的源代码,但是如果我正确记得dynamic压缩是针对ASP.Net和PHP的,但对于后者,它仍然需要在PHP框架中启用。

因此,我假设你没有看到压缩发生的原因是因为它需要在发生器端启用,在这种情况下Coldfusion。

请使用记事本编辑applicationHost.config。 我已经浪费了几个小时才明白,我在记事本++(以及在Visual Studio 2010编辑器!!)所做的更改不适用于IIS。

将其他mimeType添加到dynamicTypes / staticTypes集合中的另一种方法是使用appcmd。 "C:\Windows\System32\Inetsrv\Appcmd.exe" set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/javascript',enabled='True']" /commit:apphost

再次:在做出这些改变之后 – 你只能在记事本中看到它们。 Notepad ++(以及Visual Studio 2010编辑器!!)为applicationHost.config维护某种types的备用现实/存储。 它会显示你自己的文件版本(不同于你在记事本中看到的),即使在记事本中编辑文件并在np ++ / VS中重新打开。