如何使用 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,需要安装动态内容压缩:
没有名为 dynamicCompressionIgnoreHitFrequency
的设置,删除它。
1
(以字节为单位)对于 minFileSizeForComp
有点苛刻。压缩小文件只会减小响应大小。
将其 2700
保留为默认值。
与设置属性值不同(就像您在 staticCompressionIgnoreHitFrequency="true"
中所做的那样),将设置添加为节点不会覆盖继承的设置。
在添加之前,删除可能继承的相应设置或清除所有继承的设置是防止错误(尤其是静默的)的好习惯。
否则可能会发生错误,或者更糟的是静默错误可能会破坏您的设置。
每个应用程序池 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>
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,需要安装动态内容压缩:
没有名为
dynamicCompressionIgnoreHitFrequency
的设置,删除它。1
(以字节为单位)对于minFileSizeForComp
有点苛刻。压缩小文件只会减小响应大小。 将其2700
保留为默认值。与设置属性值不同(就像您在
staticCompressionIgnoreHitFrequency="true"
中所做的那样),将设置添加为节点不会覆盖继承的设置。在添加之前,删除可能继承的相应设置或清除所有继承的设置是防止错误(尤其是静默的)的好习惯。
否则可能会发生错误,或者更糟的是静默错误可能会破坏您的设置。
每个应用程序池 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>