IIS10中如何阻止MP4文件产生过多206 Partial Content请求
碰到这种新上传的MP4文件触发疯狂206 Partial Content请求、还连带CPU使用率飙升的情况,确实挺闹心的。结合你描述的情况(旧文件正常、新文件出问题,ARR转200效果有限),我给你几个IIS层面的配置调整思路,帮你引导浏览器正常缓冲,从根源缓解这个问题:
检查并优化静态内容压缩与缓存策略
首先确认IIS已安装「静态内容压缩」和「HTTP范围请求」组件(默认通常已安装,但可以在服务器管理器的角色功能里核对)。然后针对视频文件做以下调整:- 打开站点的「压缩」设置,勾选「启用静态内容压缩」,并把
.mp4、.mov添加到静态压缩的文件类型列表中,减少请求的体积。 - 进入站点的「HTTP响应头」,设置
Cache-Control为public, max-age=86400(即缓存1天),让浏览器缓存视频片段,避免重复发起请求。
- 打开站点的「压缩」设置,勾选「启用静态内容压缩」,并把
配置字节范围缓存优化
你可以通过站点的web.config添加针对视频文件的缓存规则,让IIS内核级缓存视频的部分内容,减少重复的206请求:<location path="*.mp4"> <system.webServer> <caching enabled="true" enableKernelCache="true"> <profiles> <add extension=".mp4" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" /> </profiles> </caching> <staticContent> <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="1.00:00:00" /> </staticContent> </system.webServer> </location>这个配置会让IIS缓存MP4文件的内容,同时告知浏览器缓存一天,从两端减少请求频率。
启用动态内容压缩(按需)
虽然静态压缩适合完整文件,但动态压缩可以优化部分内容请求的体积。确保安装「动态内容压缩」组件后,在站点的「压缩」设置里启用它。注意:动态压缩会增加少量CPU开销,但如果是频繁小请求导致的CPU上升,压缩后减少请求传输量反而可能降低整体CPU使用率。从视频文件根源修复(推荐)
你猜测是文件导出问题,大概率是视频的moov原子位置异常(moov在文件末尾而非开头)。浏览器需要读取moov原子来获取视频时长、分段信息,若它在末尾,浏览器会频繁发206请求去读取不同位置的内容。你可以用ffmpeg重新封装视频,把moov移到开头:ffmpeg -i 原文件.mp4 -movflags faststart 修复后文件.mp4虽然你没法直接控制用户的导出方式,但可以给用户提供这个工具/操作说明,甚至在服务器端加个自动处理脚本,对新上传的视频自动执行这个修复步骤,从根源解决这类问题。
调整应用池的请求处理配置
打开应用池的「高级设置」,做以下调整:- 把「队列长度」适当调大(比如设为1000),避免请求排队溢出。
- 根据服务器CPU核心数调整「最大工作进程数」(比如4核设为4),提升并发处理能力。
- 可以微调「快速失败保护」的阈值,避免因频繁请求触发应用池重启。
另外补充下你之前尝试的ARR转200方法:这种方式本质是强制浏览器下载完整文件,对大视频来说不现实,只是降低了请求频率但没解决根源问题。上面的方法更偏向于引导浏览器合理缓冲,同时让IIS更高效地处理请求。
备注:内容来源于stack exchange,提问作者Merennulli

