IIS 10服务器Brotli压缩异常问题求助
IIS 10 Brotli压缩单IP请求不生效的解决方案
针对你遇到的「Brotli压缩缓存已生成,但单IP请求返回原文件、多IP请求才返回BR压缩版本」的问题,即使设置了staticCompressionIgnoreHitFrequency=true仍未解决,可按以下步骤排查修复:
1. 显式设置staticCompressionHitFrequencyThreshold为0
IIS静态压缩默认存在staticCompressionHitFrequencyThreshold属性(默认值通常为3),即使开启了staticCompressionIgnoreHitFrequency=true,若未显式覆盖该阈值,单IP请求次数未达标时仍不会返回压缩文件。需修改applicationHost.config的httpCompression节点,添加该属性:
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" staticCompressionIgnoreHitFrequency="true" staticCompressionHitFrequencyThreshold="0"> <scheme name="br" dll="%ProgramFiles%\IIS\IIS Compression\iisbrotli.dll" /> <!--<scheme name="gzip" dll="%ProgramFiles%\IIS\IIS Compression\iiszlib.dll" />--> <staticTypes> <add mimeType="text/*" enabled="true" /> <add mimeType="message/*" enabled="true" /> <add mimeType="application/javascript" enabled="true" /> <add mimeType="application/atom+xml" enabled="true" /> <add mimeType="application/xaml+xml" enabled="true" /> <add mimeType="image/svg+xml" enabled="true" /> <add mimeType="*/*" enabled="false" /> </staticTypes> </httpCompression>
2. 验证压缩缓存目录的权限
确保IIS应用池的运行身份对C:\inetpub\temp\IIS Temporary Compressed Files目录拥有读取权限:
- 右键目录 → 属性 → 安全 → 检查应用池身份(通常是
IIS AppPool\你的站点池名称)是否在列表中,且有读取权限 - 若没有,添加该身份并赋予读取权限
3. 确认请求头包含Accept-Encoding: br
使用浏览器F12开发者工具检查请求头:
- 切换到「网络」标签,刷新目标文件,查看请求头中的
Accept-Encoding是否包含br - 若客户端未发送该头,IIS不会返回压缩文件
4. 重置IIS并清除压缩缓存
修改配置后必须执行以下操作:
- 打开管理员权限的命令提示符,执行
iisreset重启IIS服务 - 删除
C:\inetpub\temp\IIS Temporary Compressed Files下的所有文件,强制IIS重新生成压缩缓存
5. 临时禁用内核模式缓存(排查用)
内核模式缓存可能绕过压缩逻辑,可临时禁用测试:
在站点的web.config中添加以下配置:
<system.webServer> <caching enabled="false" enableKernelCache="false" /> </system.webServer>
测试生效后,可根据需求调整内核缓存策略,或保持禁用(若不影响性能)
内容的提问来源于stack exchange,提问作者Ahad Porkar
相关产品推荐
相关产品推荐

