IIS 7.5在应用程序web.config中设置后未压缩JSON

5
我一直在努力启用我们MVC3网站的JSON压缩。根据我阅读的各种文章,似乎应该能够在应用程序的web.config文件中设置application/json; charset=utf-8 MIME类型。但是这样做并没有启用压缩。但是当添加到applicationhost.config文件中时,它可以正常工作。我错过了什么吗?我的应用程序web.config文件已添加以下内容:
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
    <dynamicTypes>
        <add mimeType="application/javascript; charset=utf-8" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="application/json" enabled="true" />
        <add mimeType="application/json; charset=utf-8" enabled="true" />
    </dynamicTypes>
    <staticTypes>
        <add mimeType="application/javascript; charset=utf-8" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="application/json" enabled="true" />
        <add mimeType="application/json; charset=utf-8" enabled="true" />
    </staticTypes>
</httpCompression>
<urlCompression doStaticCompression="true" doDynamicCompression="true" />

服务器运行Windows Server 2008 R2和IIS7.5。我还为涉及的站点安装并启用了动态压缩。

如有帮助将不胜感激,因为我不希望为整个服务器启用JSON压缩。


请查看此帖子:stackoverflow.com/a/7634875/1131855我无法通过Notepad++编辑applicationHost.config。这个链接建议了一个控制台命令,对我有用。 - Maxim Eliseev
1个回答

11

HttpCompression 部分在 ApplicationHost.config 中被定义为 AppHostOnly,这会防止你在 web.config 中设置其属性。

压缩模块只从 'ApplicationHost.config' 读取服务器级别的属性,因此即使你使用 appcmdoverrideModeDefault="Allow" 解锁该部分,较低级别上的设置也会被忽略。


谢谢,这解决了混淆的问题。事实证明,即使您在ApplicationHost.config中为站点添加<location>元素以尝试允许站点级别的HttpCompression,由于AppHostOnly属性的锁定,它仍然无法使用。唯一的方法是将application/json MIME类型添加到ApplicationHost.config中的“全局”<httpCompression>部分,从而在服务器上为所有站点启用它。 - Carl Heinrich Hancke
@tpeczek “压缩模块仅从'ApplicationHost.config'读取服务器级别属性” 你有这方面的来源吗?我找不到任何来自微软官方的资料,尽管它看起来绝对是这样,特别是在IIS8+上。 - theyetiman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接