【发布时间】: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/html 和 text/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 类型在没有星号的情况下不匹配,但我不确定它是什么。它没有通过响应。有谁知道这个神秘的字符串可能来自什么?
【问题讨论】: