IIS静态压缩不是Gzip或缓存文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IIS静态压缩不是Gzip或缓存文件相关的知识,希望对你有一定的参考价值。

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

<httpCompression directory="%SystemDrive%inetpub	empIIS Temporary Compressed Files" staticCompressionEnableCpuUsage="0" staticCompressionDisableCpuUsage="100" staticCompressionIgnoreHitFrequency="true">
  <clear/>
  <scheme name="gzip" dll="%Windir%system32inetsrvgzip.dll" staticCompressionLevel="10" dynamicCompressionLevel="3" />
  <scheme name="deflate" dll="%Windir%system32inetsrvgzip.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服务器负载过程非常繁重,因此这将是一个不必要的负担。静态压缩很吸引人,因为压缩文件缓存在磁盘上。

但是,即使在连续刷新localhost页面(Ctrl + F5)并等待15 +分钟观看压缩目录后,也没有任何缓存。

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

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

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

美国10

答案

我遇到了这个问题,并将其追溯到错误的URL重写规则。静态资产生活在C:inetpubwwwrootMyProjectwwwroot,重写规则正在改变^assets/(.*)./{R:1},所以IIS正在查看MyProject的顶部而没有找到文件。但是当它将请求交给.Net应用程序时,应用程序会看到该文件并提供服务。所以这两个症状是:

  • gzip仅在启用动态压缩时起作用(因为.Net应用程序正在为文件提供服务)。
  • 关闭runAllManagedModulesForAllRequests(在modules元素上)导致我们的静态文件变为404错误---基本上表明IIS没有看到文件的问题。

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

另一答案

你看过这个: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可以看到它不是磁盘上的静态文件,因为它是动态的。

还有一个帮助,看看你的js文件实际上做了什么id,以找出它在我发布的链接中没有进行压缩的原因。

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

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

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

以上是关于IIS静态压缩不是Gzip或缓存文件的主要内容,如果未能解决你的问题,请参考以下文章

IIS开启Gzip压缩

IIS的Gzip压缩功能

Gzip压缩

IIS 7.5 上的 GZip 压缩不起作用

在 IIS 8 和 Windows 8 中设置 gzip

使用zopfli的IIS和预压缩资产