我的IIS 7动态内容压缩无法通过服务器日志验证...发送/接收的字节与压缩打开和关闭相同。
让我介绍一下到目前为止我所做的事情,以确保做得好:
1)安装动态压缩模块(duh)
2)启用动态压缩
3)在system.webserver / httpCompression下的web.config中,我添加了DynamicCompressionDisableCpuUsage = 100和DynamicCompressionEnableCpuUsage = 99,以确保压缩尽可能频繁。服务器负载一般是0%到2%的CPU,所以这应该不是问题
4)我将system.webserver / httpCompression / scheme dynamicCompressionLevel从0更改为7,因为默认值为0
5)我已经在system.webserver / httpCompression / dynamicTypes下添加了mime类型并设置了enabled = true,并通过请求分析器确保mimetype确实是正确的
6)在此之后,我甚至重新启动了网站/回收应用程序池
7)我甚至添加了mime-types来包含charset,我读过的地方有时会影响动态压缩。
我仍然没有减少流量!是什么赋予了!?我甚至将system.webserver / httpCompression / minFileSizeForComp设置为1000B,即使这只是静态压缩,也许它可能以某种方式延续到动态压缩。日志中发送的字节仍然与未压缩的字节相同。
这是我的web.config部分FYI:
<system.webServer>
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" dynamicCompressionDisableCpuUsage="100" dynamicCompressionEnableCpuUsage="99" minFileSizeForComp="1000">
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" dynamicCompressionLevel="7" staticCompressionLevel="7"/>
<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/xml" enabled="true"/>
<add mimeType="application/json" enabled="true"/>
<add mimeType="application/json; charset=utf-8" enabled="true"/>
<add mimeType="application/json; charset=UTF-8" enabled="true"/>
<add mimeType="*/*" enabled="false"/>
</dynamicTypes>
</httpCompression>
<urlCompression doStaticCompression="true" doDynamicCompression="true"/>
</system.webServer>
以下是我提到的其他一些问题来提出这些设置......似乎我已经尝试了书中的每一个技巧。
How can I get gzip compression in IIS7 working?
https://serverfault.com/questions/200041/how-do-determine-the-dynamiccompressiondisablecpuusage-setting-on-iis7
答案 0 :(得分:2)
根据此ServerFault答案:https://serverfault.com/a/125156/117212 - 您无法在web.config中更改httpCompression,它需要在applicationHost.config文件中完成。以下是我在Azure Web角色中使用的代码,用于修改applicationHost.config文件并添加mime类型以进行压缩:
using (var serverManager = new ServerManager())
{
var config = serverManager.GetApplicationHostConfiguration();
var httpCompressionSection = config.GetSection("system.webServer/httpCompression");
var dynamicTypesCollection = httpCompressionSection.GetCollection("dynamicTypes");
Action<string> fnCheckAndAddIfMissing = mimeType =>
{
if (dynamicTypesCollection.Any(x =>
{
var v = x.GetAttributeValue("mimeType");
if (v != null && v.ToString() == mimeType)
{
return true;
}
return false;
}) == false)
{
ConfigurationElement addElement = dynamicTypesCollection.CreateElement("add");
addElement["mimeType"] = mimeType;
addElement["enabled"] = true;
dynamicTypesCollection.AddAt(0, addElement);
}
};
fnCheckAndAddIfMissing("application/json");
fnCheckAndAddIfMissing("application/json; charset=utf-8");
serverManager.CommitChanges();
}
ServerManager
来自NuGet中的Microsoft.Web.Administration
包。