服务器没有动态压缩 js 和 css 文件。但奇怪的是,在其他 3 台服务器上测试时,它运行正常
发生的情况是,所有环境中的请求都指定它们接受 GZIP 编码,但不同之处在于服务器上的输出未指定 GZIP 内容编码,但其他环境指定了。
我们有一个动态脚本,用于设置内容和内容编码,并且除了这台服务器之外,它在所有其他环境中都运行良好。所以我认为这是 IIS 问题。为此,我从无法正常工作的服务器上的 MetaBase.xml 中物理复制了压缩元素,并将其粘贴到我的本地计算机中,尝试复制,但失败了。
每个设置看起来都应该启用压缩,但无论出于什么原因,该服务器都没有注意到添加的响应标头,如下所示:
"Content-encoding", "gzip"
短暂性脑缺血发作
安德鲁
答案1
仅通过脚本设置响应标头并不能“打开”压缩。它只会添加标头,而您并不想这样做。IIS 应该在压缩时自行添加标头。
您需要在 IIS 层为动态和静态资产启用压缩。您可以通过 Web 服务器级别的 UI 启用此功能,并在元数据库中优化设置。默认情况下,在 IIS6 上,启用动态压缩时,只有 ASP、EXE 和 DLL 文件的输出会被压缩。请注意,ASPX 明显缺失!
这是我在 IIS6 上用于压缩的元数据库配置(一些值通过 UI 设置,其他值手动编辑)。
<IIsFilter Location ="/LM/W3SVC/Filters/Compression"
>
</IIsFilter>
<IIsCompressionScheme Location ="/LM/W3SVC/Filters/Compression/deflate"
HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"
HcCreateFlags="0"
HcDoDynamicCompression="TRUE"
HcDoOnDemandCompression="TRUE"
HcDoStaticCompression="TRUE"
HcDynamicCompressionLevel="4"
HcFileExtensions="htm
html
txt
css
js
xml"
HcOnDemandCompLevel="10"
HcPriority="1"
HcScriptFileExtensions="asp
aspx
dll
exe"
>
</IIsCompressionScheme>
<IIsCompressionScheme Location ="/LM/W3SVC/Filters/Compression/gzip"
HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"
HcCreateFlags="1"
HcDoDynamicCompression="TRUE"
HcDoOnDemandCompression="TRUE"
HcDoStaticCompression="TRUE"
HcDynamicCompressionLevel="4"
HcFileExtensions="htm
html
txt
css
js
xml"
HcOnDemandCompLevel="10"
HcPriority="1"
HcScriptFileExtensions="asp
aspx
dll
exe"
>
</IIsCompressionScheme>
<IIsCompressionSchemes Location ="/LM/W3SVC/Filters/Compression/Parameters"
HcCacheControlHeader="max-age=86400"
HcCompressionBufferSize="8192"
HcCompressionDirectory="c:\temp\IIS_temp_compressed"
HcDoDiskSpaceLimiting="TRUE"
HcDoDynamicCompression="TRUE"
HcDoOnDemandCompression="TRUE"
HcDoStaticCompression="TRUE"
HcExpiresHeader="Wed, 01 Jan 1997 12:00:00 GMT"
HcFilesDeletedPerDiskFree="256"
HcIoBufferSize="8192"
HcMaxDiskSpaceUsage="99614720"
HcMaxQueueLength="1000"
HcMinFileSizeForComp="1"
HcNoCompressionForHttp10="TRUE"
HcNoCompressionForProxies="FALSE"
HcNoCompressionForRange="FALSE"
HcSendCacheHeaders="FALSE"
>
</IIsCompressionSchemes>