如何使用 IIS 压缩所有文件

How to compress all files with IIS

IIS 压缩已启用:

以下是web.config的httpCompression标签:

<httpCompression
      directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files"
      minFileSizeForComp="1"
      staticCompressionIgnoreHitFrequency="true"
      dynamicCompressionIgnoreHitFrequency="true">
  <dynamicTypes>
    <add mimeType="*/*" enabled="true" />
  </dynamicTypes>
  <staticTypes>
    <add mimeType="*/*" enabled="true" />
  </staticTypes>
</httpCompression>  

当 运行 网络应用程序时,我只看到 CSS 和 JavaScript 文件被压缩:

很遗憾,其他文件未压缩:

我在“C:\inetpub\temp”中没有看到“IIS 临时压缩文件”。

任何人都可以提供有关如何诊断此问题的提示吗?

更新[2020-08-13] Windows Server 2016 上的配置编辑器:

更新[2020-08-13] 根据@Kul-Tigin,需要安装动态内容压缩:

  1. 没有名为 dynamicCompressionIgnoreHitFrequency 的设置,删除它。

  2. 1(以字节为单位)对于 minFileSizeForComp 有点苛刻。压缩小文件只会减小响应大小。 将其 2700 保留为默认值。

  3. 与设置属性值不同(就像您在 staticCompressionIgnoreHitFrequency="true" 中所做的那样),将设置添加为节点不会覆盖继承的设置。

    在添加之前,删除可能继承的相应设置或清除所有继承的设置是防止错误(尤其是静默的)的好习惯。

    否则可能会发生错误,或者更糟的是静默错误可能会破坏您的设置。

  4. 每个应用程序池
  5. 100(以 MB 为单位)space 限制可能不足以满足您的需求。如果我没记错的话,你的大部分文件都是兆字节的 webassembly 文件。

    因为您希望尽可能压缩所有文件;指定一个足够大的值。

    尽可能大;所有文件的未压缩长度的总和。说 2048 MB。

    通过这种方式您无法达到磁盘 space 限制,因此 none 的压缩缓存不会因缺少 space 而被删除。

    只要原始文件没有改变,压缩的缓存就会存在并被传送。

    我的服务器上存储了 3 年的压缩缓存文件,顺便说一句,准备交付。

所以,试试下面的方法。

如果它不起作用,请提供更多关于请求 headers 和以未压缩形式交付的文件的信息。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpCompression 
        sendCacheHeaders="false" 
        directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" 
        doDiskSpaceLimiting="true" 
        maxDiskSpaceUsage="2048" 
        minFileSizeForComp="2700" 
        noCompressionForHttp10="true" 
        noCompressionForProxies="true" 
        noCompressionForRange="true" 
        staticCompressionIgnoreHitFrequency="true" 
        staticCompressionDisableCpuUsage="100" 
        staticCompressionEnableCpuUsage="50" 
        dynamicCompressionDisableCpuUsage="90" 
        dynamicCompressionEnableCpuUsage="50" 
        dynamicCompressionBufferLimit="65536">
          <dynamicTypes>
            <clear />
            <add mimeType="*/*" enabled="true" />
          </dynamicTypes>
          <staticTypes>
            <clear />
            <add mimeType="*/*" enabled="true" />
          </staticTypes>
        </httpCompression>  
    </system.webServer>
</configuration>