【问题标题】:IIS Static Compression does not Gzip, or cache filesIIS 静态压缩不 Gzip,也不缓存文件
【发布时间】:2018-02-01 18:19:09
【问题描述】:

我有一个 ASP.NET 网站,我正在尝试为其启用静态压缩。我的网站有以下压缩配置。

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" staticCompressionEnableCpuUsage="0" staticCompressionDisableCpuUsage="100" staticCompressionIgnoreHitFrequency="true">
  <clear/>
  <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="10" dynamicCompressionLevel="3" />
  <scheme name="deflate" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="10" dynamicCompressionLevel="3" />
  <staticTypes>
    <clear/>
    <add mimeType="text/*" enabled="true" />
    <add mimeType="message/*" enabled="true" />
    <add mimeType="application/x-javascript" enabled="true" />
    <add mimeType="application/javascript" enabled="true" />
    <add mimeType="*/*" enabled="false" />
  </staticTypes>
</httpCompression>
<urlCompression doStaticCompression="true" doDynamicCompression="false"  dynamicCompressionBeforeCache="false" />

我确实想要启用动态压缩。根据Microsoft documentation

与静态压缩不同,IIS 7 每次客户端请求内容时都会执行动态压缩,但压缩后的版本不会缓存到磁盘。

我的 Web 服务器的进程负载相当高,因此这将是一个不必要的负担。 By Static Compression 很有吸引力,因为压缩文件缓存在磁盘上。

但是,即使在不断刷新 localhost 页面 (Ctrl+F5) 并等待 15 分钟以上查看压缩目录后,也没有缓存任何内容。

此外,没有任何相关文件 (css/js/html) 与 gzip 压缩头一起返回。

同时安装了动态和静态压缩。动态已关闭。如果我打开动态压缩,我开始看到 gzip HTTP 响应标头回来了。

我错过了什么?为什么静态压缩会拒绝工作?

IIS 10

【问题讨论】:

标签: iis web-config compression gzip


【解决方案1】:

我遇到了这个问题,并将其归结为错误的 URL 重写规则。静态资产位于C:\inetpub\wwwroot\MyProject\wwwroot 中,重写规则将^assets/(.*) 更改为./{R:1},因此IIS 正在查看MyProject 的顶部并没有找到该文件。但是当它把请求交给 .Net 应用程序时,应用程序会看到文件并提供它。所以这两个症状是:

  • gzip 仅在启用动态压缩时才有效(因为 .Net 应用程序正在提供文件)。
  • 关闭runAllManagedModulesForAllRequests(在modules元素上)导致我们的静态文件变成404错误---基本上暴露了IIS看不到文件的问题。

为了解决这个问题,我将重写规则从 ./{R:1} 更改为 ./wwwroot/{R:1}

【讨论】:

    【解决方案2】:

    你看过这个:https://blogs.msdn.microsoft.com/friis/2017/09/05/iis-dynamic-compression-and-new-dynamic-compression-features-in-iis-10/

    从您的问题中看不到太多背景信息......但对我来说这很有效。

    由 asp.net mvc 缓存,因为它是多个 js 文件的捆绑。我猜 IIS 可以看到它不是磁盘上的静态文件,这就是它是动态的原因。

    还有助于查看 id 对您的 js 文件的实际作用,以了解它为什么没有在我发布的链接中进行压缩。

    我还在您发布的链接中看到了一行:

    与静态压缩不同,IIS 7 每次客户端请求内容时都会执行动态压缩,但压缩后的版本不会缓存到磁盘。之所以进行此更改,是因为静态内容和动态内容之间的主要区别。静态内容不会改变。但是,动态内容通常是由应用程序创建并因此经常更改的内容,例如 Active Server Pages (ASP) 或 ASP.NET 内容。由于动态内容应该经常更改,IIS 7 不会缓存它。

    也尝试阅读这篇文章:https://forums.iis.net/t/1071156.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-10
      • 1970-01-01
      • 2016-10-23
      • 2010-11-12
      • 2020-12-11
      • 1970-01-01
      • 2014-07-19
      相关资源
      最近更新 更多