我尝试在IIS7上配置httpCompression
。通过谷歌搜索,我发现它可以使用config中的httpCompression
部分进行。问题是,我无法通过web.config使其工作。
当我在applicationHost.config
中进行配置时,一切都按需要运行,但我希望能够为每个应用程序进行此配置,而不是全局。
我将applicationHost.config
中的部分定义更改为<section name="httpCompression" overrideModeDefault="Allow" />
,并将httpCompression
部分移至web.config:
<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>
<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="application/json; charset=utf-8" enabled="true" />
<add mimeType="*/*" enabled="false" />
</dynamicTypes>
</httpCompression>
我错过了什么?看起来IIS根本没有从web.config读取压缩配置。
每次更改后,我都会将应用程序池循环使用,所以这不是问题。
答案 0 :(得分:6)
根据此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
包。
答案 1 :(得分:3)
您应该检查整个config file hierarchy。
如果您从applicationHost
中删除了该部分,则可能会继承父目录的machine.config
或web.config
。