<system.webServer>
我正在尝试在 IIS 下为我的静态文件支持 GZip 压缩(默认情况下应该启用但实际上没有),但目前还没有成功。以下是Web 应用程序的 web.config 文件中 node下的部分;
<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,deflate,sdch
接受语言:en-US,en;q=0.8
缓存控制:无缓存
连接:保持活动
主机:我的网站网址
Pragma:无缓存
用户代理:Mozilla/5.0 (Windows NT 6.0) AppleWebKit/534.30 (KHTML,如 Gecko) Chrome/12.0.742.122 Safari/534.30
这些是响应标头;
接受范围:字节
内容长度:232651
内容类型:应用程序/x-javascript
日期:2011 年 8 月 4 日星期四 08:58:19 GMT
ETag:“a69135734a50cc1:0”
最后修改时间:2011 年 8 月 1 日星期一 12:56:37 GMT
服务器:Microsoft-IIS/7.5
X-Powered-By: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 />
我在这里遗漏了什么?
答案1
看来您可能没有正确设置临时压缩文件夹的权限。您需要确保运行 IIS 安装(或应用程序)的用户对压缩文件夹具有写入权限。
答案2
经过大量搜索,我终于找到了在 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 元素:
<?xml version="1.0" encoding="UTF-8"?> <configuration>
<system.webServer>
<serverRuntime frequentHitThreshold="1" frequentHitTimePeriod="10:00:00" />
...
在本例中,我将其设置为每 10 小时访问一次文件。您可以根据需要调整值。以下是解释 serverRuntime 元素的文档:
http://www.iis.net/configreference/system.webserver/serverruntime
我希望这也能帮助你的压缩正常工作。
注意:您也可以在 applicationHost.config 文件中设置 serverRuntime 元素,但我选择在 web.config 中更改它,因为我们拥有多个服务器和包含各种站点的服务器场,从这个粒度级别来控制它对我来说更容易。
答案3
这对我有用:
<urlCompression doStaticCompression="true" doDynamicCompression="true" dynamicCompressionBeforeCache="true" />
<httpCompression noCompressionForRange="false" noCompressionForHttp10="false" noCompressionForProxies="false">
<dynamicTypes>
<add mimeType="text/css" enabled="true" />
</dynamicTypes>
<staticTypes>
<add mimeType="text/css" enabled="true" />
</staticTypes>
<staticTypes>
<add mimeType="text/javascript" enabled="true" />
</staticTypes>
</httpCompression>
还有 text/javascript mime-type,但您只有一个应用程序。这是一个问题,直到我添加了 text/...