场景说明
同一 URL /api/vary/language 根据 Accept-Language 返回不同 JSON。正确配置应加 Vary: Accept-Language,CDN 按语言分 cache key。
同一 URL,语言由 X-Demo-Accept-Language 模拟。有 Vary 时响应含 Vary: Accept-Language, X-Demo-Accept-Language(后者让浏览器能在 Network 里按语言分 disk cache)。请关闭 Disable cache。
操作
HIT 时 Network Size 应为 (disk cache);无 Vary 换语言也 HIT · 有 Vary 换语言 MISS
Network 面板怎么看
- 先关闭 DevTools 的
Disable cache,再打开 Network 面板 - 有 Vary:同语言点两次 → 第二次 Size 为
(disk cache),Time ≈ 0ms - 有 Vary:换语言 → Size 为完整字节数(走网络 / CDN MISS)
- 无 Vary:任意语言第二次起均为
(disk cache)(可能串语言,见 title 列)
规范依据(RFC)
同一 URL 因 Accept-Language 返回不同内容时,应用 Vary: Accept-Language 拆分 cache key。
| 文档 | 与本 Demo 相关 | 章节 |
|---|---|---|
| RFC 9111 | HTTP Caching — Cache-Control、fresh/stale、存储条件 |
§2 · §3 · §4.1 · §5 |
| RFC 9110 | HTTP Semantics — Vary 定义;扩大 cache key |
§12.5.5 |
| Fetch | 浏览器如何实现 HTTP 缓存(Chrome 等) | network-or-cache |
RFC 9111 §2:A cache might store multiple responses for a request target … Caches differentiate these responses … using information in theVaryresponse header field.
RFC 9111 §4.1:… MUST NOT use that stored response … unless all … request header fields nominated byVary… match those fields in the original request.
RFC 9110 §12.5.5:Vary expands the cache key required to match a new request to the stored cache entry.
无 Vary → 仅 URL 作 key(RFC 9111 §2);有 Vary → 同 URL 按语言分条目(§4.1)。