CDN的缓存Key是决定资源缓存唯一性的核心标识
参考资料
CDN的缓存Key是决定资源缓存唯一性的核心标识
CDN的缓存Key是决定资源缓存唯一性的核心标识,用于区分不同版本的资源。其组成和处理规则直接影响缓存命中率。
核心组成(默认)
通常包含以下元素:
完整域名(
Host
)www.example.com
和cdn.example.com
会被视为不同资源。URI路径
/image.jpg
和/image.png
独立缓存。查询字符串(Query String)
默认行为:带参URL视为新资源style.css?v=1
和style.css?v=2
会缓存两个副本。
关键配置选项
1. 查询字符串处理
忽略所有参数
product?id=123
=product?id=456
→ 命中同一缓存。忽略特定参数
保留utm_source
,忽略其他广告参数。仅缓存指定参数
只认version=2.0
,其他参数丢弃。
2. 请求头影响
部分CDN支持将头信息加入Key:
Accept-Encoding
(压缩类型)
区分Gzip/Brotli版本。Cookie
(谨慎启用)
个性化内容需隔离缓存(如登录态)。
典型场景示例
原始请求 | 缓存Key配置 | 是否命中同一缓存 |
---|---|---|
/logo.png?bg=dark | 忽略所有参数 | ✅ 与/logo.png 相同 |
/app.js?v=2 | 仅保留v 参数 | ✅ 与/app.js?v=3 相同 |
/user.css + Cookie | 配置Cookie 进Key | ❌ 每个用户独立缓存 |
最佳实践
静态资源忽略所有参数
避免因?timestamp=1623...
导致缓存碎片。版本化文件名代替参数
用/app.2a3b.css
替代/app.css?v=2
。动态资源按需隔离
广告参数(utm_*
)通常忽略,会话ID需隔离。变更配置后主动刷新缓存
修改Key规则后,旧缓存可能失效需清理。
⚠️ 错误配置代价
若未忽略无关参数,CDN可能存储百万级相同资源的副本,导致命中率暴跌,回源流量激增。