
本文从架构师角度浓缩了导致视频在CDN无法缓存的核心原因,并给出面向点播(VOD)和直播(Live)的可操作策略,帮助在带宽、延迟和安全之间找到平衡点。
常见原因包括源站返回了不缓存或短TTL的HTTP头(如Cache-Control含no-store/no-cache)、响应携带Set-Cookie/Authorization、URL带大量不可归一化的查询串、以及使用了按字节分片的Range请求等。CDN的默认策略也会根据文件类型、响应状态码或文件大小决定是否缓存。
流媒体协议如HLS/DASH把视频拆成小片段(ts、fMP4),这些片段更易缓存。相反,客户端频繁发起带范围(Range请求)的单大文件下载会导致缓存命中率下降。此外,使用长短令牌签名URL、WebSocket或WebRTC推流也不适合传统CDN缓存。
关键在源站和CDN控制台:源站需要下发合理的Cache-Control、Expires、ETag/Last-Modified,并尽量避免无谓的Set-Cookie;CDN端则配置缓存键规则(是否包含query string、header白名单)、最大TTL、忽略/合并请求策略与回源回退行为。
点播应尽量将内容做成可缓存的静态资产:分段化媒资并为分片设置长TTL,在CDN上开启对象压缩和边缘缓存(边缘缓存)优先;对带签名的访问用CDN的Token功能或使用路径而非查询参数来保持缓存命中;必要时用预热(prefetch)和缓存预分发(push)提升首次命中率。
直播对延迟敏感,策略是分层缓存:对低延迟段(manifest、最新小段)使用短TTL或直接回源,对于历史段设置长TTL缓存以降低带宽;对超低延迟场景考虑边缘推流或专用低延迟CDN。尽量把认证信息放在请求头或短期签名,避免影响缓存键。
包含用户个性化内容(如动态水印、广告插入)、实时交互流或需严格权限校验的视频片段,建议设置不缓存或采用分段缓存+回源校验策略;对敏感内容可在CDN层做鉴权后再决定是否缓存。
关注命中率、回源流量、边缘带宽和延迟指标。通过日志分析找出最常请求的片段和高回源路径,调整TTL、缓存键、合并小文件或使用分段预热。采用A/B测试不同策略并监控QPS、带宽成本与用户启动时间以做权衡。
步骤建议:1)审计源站响应头并移除不必要的Set-Cookie;2)统一分段格式与命名,尽量把鉴权从query移到header或短期路径签名;3)在CDN上配置缓存键和TTL模板,并做小范围预热;4)持续监测并调整策略,必要时引入多CDN或边缘计算方案。