我的 angular2 项目为我的 web 应用程序构建了预压缩的 gzip 文件,但我的 IIS 只提供普通的“.js”文件而不是压缩的“.gzip”文件。我的浏览器愿意接受 gzip。
IIS 允许 gzip 响应的正确设置是什么?
我已经搜索了 google/SO/SU,但只找到了非“预压缩”内容的解决方案。
最佳答案
一个更简洁优雅的解决方案:
注意:文件扩展名 .gzip
看起来很奇怪,一般来说,我们将 gzip 文件命名为 .gz
,所以在这个例子中,我们使用 .gz
相反 .gzip
,如果你坚持.gzip
,只需替换以下配置文件中的所有扩展名。
代码第一,这就是我们所需要的 web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<staticContent>
<remove fileExtension=".js.gz" />
<remove fileExtension=".css.gz" />
<remove fileExtension=".png.gz" />
<remove fileExtension=".jpg.gz" />
<remove fileExtension=".gif.gz" />
<remove fileExtension=".svg.gz" />
<remove fileExtension=".html.gz" />
<remove fileExtension=".json.gz" />
<mimeMap fileExtension=".js.gz" mimeType="application/javascript" />
<mimeMap fileExtension=".css.gz" mimeType="text/css" />
<mimeMap fileExtension=".png.gz" mimeType="image/png" />
<mimeMap fileExtension=".jpg.gz" mimeType="image/jpeg" />
<mimeMap fileExtension=".gif.gz" mimeType="image/gif" />
<mimeMap fileExtension=".svg.gz" mimeType="image/svg+xml" />
<mimeMap fileExtension=".html.gz" mimeType="text/html" />
<mimeMap fileExtension=".json.gz" mimeType="application/json" />
</staticContent>
<rewrite>
<outboundRules rewriteBeforeCache="true">
<rule name="Custom gzip file header">
<match serverVariable="RESPONSE_CONTENT_ENCODING" pattern=".*" />
<conditions>
<add input="{REQUEST_URI}" pattern="\.gz$" />
</conditions>
<action type="Rewrite" value="gzip"/>
</rule>
</outboundRules>
<rules>
<rule name="Rewrite gzip file">
<match url="(.*)"/>
<conditions>
<add input="{HTTP_ACCEPT_ENCODING}" pattern="gzip" />
<add input="{REQUEST_FILENAME}.gz" matchType="IsFile" />
</conditions>
<action type="Rewrite" url="{R:1}.gz" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
而且,这是它的工作原理:
为了实现成功的 gziped 数据传输,我们需要:
Accept-Encoding
Content-Encoding
header 的响应application/gzip
这四个条件必须同时满足。
如果您使用
Content-Encoding: gzip
发送未压缩的文件,浏览器会返回错误;如果您发送没有
Content-Encoding
的压缩文件头,或不匹配的 MIME 类型,页面可能会返回一些 Zenith Star 的文本。所以我们正在做的是:
Content-Encoding
的响应头的header , 仅当客户端发送 header Accept-Encoding
此解决方案适用于我的 IIS7,不确定它是否也适用于 IIS10。
如果您遇到任何问题,请告诉我:D
关于angular - 设置 IIS10 以提供预压缩文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48889701/