【问题标题】:Why isn't IIS compression recognizing my set mime types?为什么 IIS 压缩不能识别我设置的 MIME 类型?
【发布时间】:2015-12-18 10:04:52
【问题描述】:

我正在将 ASP.NET 5/MVC 6 Web 应用程序发布到基本 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 类型在没有星号的情况下不匹配,但我不确定它是什么。它没有通过响应。有谁知道这个神秘的字符串可能来自什么?

【问题讨论】:

    标签: asp.net azure iis gzip


    【解决方案1】:

    尝试设置staticCompressionIgnoreHitFrequency = 'True'

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

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

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

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

    【讨论】:

    • 在上述所有情况下,我已经达到了足以触发压缩的内容。此外,这并不能解释使用 '*/*' 时的压缩。
    • 我已在问题中添加了其他信息。
    猜你喜欢
    • 2016-01-05
    • 2018-03-01
    • 1970-01-01
    • 2012-07-09
    • 2012-08-17
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    相关资源
    最近更新 更多