为什么IIS压缩无法识别我设置的mime类型?

时间:2015-09-21 16:03:23

标签: asp.net azure iis gzip

我正在将ASP.NET 5 / MVC 6 Web应用程序发布到Basic Azure实例。默认情况下,我的CSS返回gzip编码,但我的javascript不是。

要诊断这一点,我已添加,然后将web.config部署到我的webroot:

<configuration>
    <system.webServer>
        <httpCompression>
            <staticTypes>
                <clear />
            </staticTypes>
            <dynamicTypes>
                <clear />
            </dynamicTypes>
        </httpCompression>
    </system.webServer>
</configuration>

当我发布上述web.config时,所有压缩都会按预期停止。

然后我更改了以下部分:

<staticTypes>
    <clear />
    <add mimeType="*/*" enabled="true" />
</staticTypes>
<dynamicTypes>
    <clear />
    <add mimeType="*/*" enabled="true" />
</dynamicTypes>

现在一切都是gzip编码的;我的CSS,javascript,html,webfonts,svgs等。

接下来,我将其限制为仅文本编码:

<staticTypes>
    <clear />
    <add mimeType="text/*" enabled="true" />
    <add mimeType="*/*" enabled="false" />
</staticTypes>
<dynamicTypes>
    <clear />
    <add mimeType="text/*" enabled="true" />
    <add mimeType="*/*" enabled="false" />
</dynamicTypes>

这再次按预期工作,gzip编码我的css(text/css)和我的html(text/htmltext/html; charset=utf-8),但没有别的。

这是我不明白的。以下更改无效:

<staticTypes>
    <clear />
    <add mimeType="text/*" enabled="true" />
    <add mimeType="application/javascript" enabled="true" />
    <add mimeType="application/javascript; charset=utf-8" enabled="true" />
    <add mimeType="*/*" enabled="false" />
</staticTypes>
<dynamicTypes>
    <clear />
    <add mimeType="text/*" enabled="true" />
    <add mimeType="application/javascript" enabled="true" />
    <add mimeType="application/javascript; charset=utf-8" enabled="true" />
    <add mimeType="*/*" enabled="false" />
</dynamicTypes>

我已经检查并仔细检查过我的javascript确实被返回为application/javascript。为了更好的衡量,我还包括了uft-8变体。

显然,我的web.config以某种方式受到尊重,因为我可以完全关闭它。显然,IIS能够压缩javascript等等,因为我可以完全打开它。我的配置中缺少什么使我无法仅设置要压缩的特定mime类型?

修改

我尝试了以下操作,为mime类型添加了星星,现在正在运行:

<staticTypes>
    <clear />
    <add mimeType="text/*" enabled="true" />
    <add mimeType="application/javascript*" enabled="true" />
    <add mimeType="*/*" enabled="false" />
</staticTypes>
<dynamicTypes>
    <clear />
    <add mimeType="text/*" enabled="true" />
    <add mimeType="application/javascript*" enabled="true" />
    <add mimeType="*/*" enabled="false" />
</dynamicTypes>

显然有一些尾随字符串导致mime类型不匹配而没有最后的星号,但我不确定它是什么。它没有通过回应。有谁知道这个神秘的字符串是什么?

1 个答案:

答案 0 :(得分:1)

尝试设置staticCompressionIgnoreHitFrequency = 'True'

这是文档中的httpCompression节点的一部分:

  

如果为True,则禁用静态文件仅在一段时间内被击中一定次数时被压缩的行为。

还有其他一些设置可以控制何时打开或关闭静态压缩。

来自:http://www.iis.net/configreference/system.webserver/httpcompression