IIS + compression-webpack-plugin(gzip)-带有源的“脚本”加载失败

时间:2018-11-30 12:57:17

标签: iis asp.net-mvc-5 compression gzip webpack-4

我使用 compression-webpack-plugin 将我的JavaScript文件压缩为ASP.NET MVC 5项目中的gz格式。

我的 webpack.config.js 的一部分,具有 compression-webpack-plugin 设置:

const CompressionPlugin = require('compression-webpack-plugin');

module.exports = {
//...
  plugins: [
  //...
    new CompressionPlugin({
      test: /\.(js|css)$/,
      filename: '[path].gz[query]',
      algorithm: 'gzip',
      deleteOriginalAssets: true
    }),
  ],
//...
};

效果很好:

enter image description here

下一步是在IIS中启用GZIP压缩,因此首先,我确保在 Windows功能中具有必要的功能:

enter image description here

...并直接在IIS中为我的应用启用压缩,如下图所示。

enter image description here

此外,我已将这段代码添加到我的 Web.config

<system.webServer>
   <urlCompression doStaticCompression="true" doDynamicCompression="true" />
</system.webServer>

构建脚本无法通过网络浏览器加载后-控制台中的每个脚本文件都收到警告:

  

带有源的“脚本”的加载失败   „ http://192.168.100.100:8088/Scripts/dist/runtime.7b9bc97b36a783fd7495.js”。

我做错了什么?我应该在后端设置其他内容吗?请注意,我包含扩展名为 .js 的脚本,而不是 .js.gz -这是错误的吗?

1 个答案:

答案 0 :(得分:2)

好吧,最后,经过真正的深入搜索,我找到了解决方案。

  1. 在IIS中为项目禁用动态和静态压缩(因为我已经压缩了文件,所以请不要使用CPU!)

enter image description here

  1. 从此处下载并安装IIS的URL重写模块:https://www.iis.net/downloads/microsoft/url-rewrite

  2. 从Web.config中删除以下行(如果仍然存在):

<urlCompression doStaticCompression="true" doDynamicCompression="true" />

  1. 在下面的代码段中添加到Web.config:

<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>

  1. 确保IIS中的MIME类型中包含.gz:

enter image description here