IIS中GZIP压缩头显示正常但检测工具提示未压缩的问题排查咨询
IIS中GZIP压缩头显示正常但检测工具提示未压缩的问题排查咨询
嗨,我来帮你梳理下这个棘手的问题——明明响应头显示了Content-Encoding: GZIP,但Pingdom这类工具却提示没有压缩,咱们一步步拆解可能的原因和解决方向:
一、先排查配置冲突问题
你现在在applicationhost.config和Web.config里都配置了httpCompression,而且两处用的GZIP模块不一样:
applicationhost.config里用的是IIS Compression扩展的iiszlib.dllWeb.config里用的是系统自带的gzip.dll,还移除了Brotli
这种混合配置很容易导致IIS的压缩逻辑混乱,建议先统一配置:要么全部用IIS Compression的模块(保留applicationhost.config里的配置,调整GZIP优先级高于Brotli),要么全部用系统自带的压缩模块(移除applicationhost.config里的IIS Compression相关配置)。
二、验证压缩是否真的生效(别只看工具提示)
Pingdom的检测有时候会有误差,建议用浏览器开发者工具的Network面板做更准确的验证:
- 找到你测试的资源,查看
Size列:如果显示的是xxx KB (compressed),或者实际传输大小远小于原始文件大小,说明压缩已经生效,只是Pingdom的检测逻辑有问题; - 如果实际传输大小和原始文件大小几乎一致,那才是真的没压缩,需要继续排查。
三、具体配置细节检查
- 压缩缓存问题:IIS会把压缩后的文件缓存到
%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files目录,如果之前的未压缩版本被缓存了,即使你改了配置,IIS也可能不会重新压缩。建议清空这个目录的所有文件,然后重启IIS。 - 静态/动态类型覆盖:检查两处配置里的
staticTypes和dynamicTypes,确保你测试的资源MIME类型被包含在内(比如你测试的是CSS文件,text/css属于text/*,已经被设为enabled="true",这部分没问题)。 - 动态压缩缓冲区限制:
Web.config里的dynamicCompressionBufferLimit="1200000",如果你的动态内容(比如ASP.NET页面)大小超过1.2MB,可能不会触发动态压缩,可以尝试调大这个值或者暂时移除该属性测试。
四、分步测试建议
- 先注释掉
Web.config里的<httpCompression>整个节点,只保留applicationhost.config的配置,并且确保GZIP的<scheme>节点在Brotli前面(或者给GZIP加priority="1",Brotli加priority="2"),重启IIS后再测试。 - 如果还是有问题,暂时在
applicationhost.config里注释掉Brotli的<scheme>节点,只保留GZIP配置,清空压缩缓存,重启IIS再验证。 - 检查请求头:确认测试工具/浏览器发送的
Accept-Encoding头包含gzip(一般浏览器都会自动发送,但有些工具可能需要手动设置),如果请求头里没有gzip,IIS不会返回压缩内容。
五、关于卸载Brotli的建议
暂时不需要急着卸载Brotli,先解决配置冲突的问题——混合使用不同的压缩模块才是最可能的元凶。等统一配置后如果还是不行,再考虑禁用或卸载Brotli测试。
备注:内容来源于stack exchange,提问作者MiscellaneousUser
相关产品推荐
相关产品推荐

