目标
用户偶尔看到其他语言版本,或只支持 gzip 的客户端收到 Brotli 负载,因为缓存键忽略了请求头。本配方用不同 Accept-Encoding 与 Accept-Language 请求同一 URL,观察是否命中错误变体,再确认修复后 Vary 头能把缓存正确分区,避免缓存污染。
步骤要点
- 用两种编码请求同一资源,检查 content-encoding 与 vary。
- 用不同语言头重复请求,确认没有串语言。
- 为响应添加 Vary 或把变体纳入缓存键。
- 遍历多种编码验证每个变体独立缓存。
curl -sI -H 'Accept-Encoding: gzip' https://cdn.example.com/app.js | grep -i 'content-encoding\|vary'
curl -sI -H 'Accept-Encoding: br' https://cdn.example.com/app.js | grep -i 'content-encoding\|vary'
排错提示
- Vary 头在但缓存仍归一会继续出错,需显式纳入缓存键。
- 语言串扰可通过按语言分 URL 解决。
- 对过多头 Vary 会拉低命中率。
适用边界
- 不覆盖浏览器私有缓存。
- 需要能控制缓存键。