Vary: Cookie 实验台

Case 11 — public 缓存 + Vary:Cookie 如何打碎 CDN / 浏览器缓存命中率

场景说明

API 对 Cookie 敏感却设置 Cache-Control: public + Vary: Cookie。每个不同 Cookie 产生独立 cache key,10 万用户 ≈ 10 万份「相同 JSON」副本。

两层缓存:① 浏览器 HTTP 缓存 — Network Size 列出现 (disk cache);② CDN 模拟 — 仅未命中浏览器缓存、请求打到服务端时 Response Header 才有 X-Demo-Cache-Status。请先关闭 DevTools 的 Disable cache。

表格「浏览器缓存」列与 Network 对齐;浏览器 HIT 时 CDN 列显示「未打服务端」(JSON 里旧的 CDN 字段会被忽略)。

模拟多用户请求

Network 面板怎么看

规范依据(RFC)

RFC = Request for Comments,IETF 发布的互联网协议标准。Demo 行为应对照规范,再对比 Chrome 实测。

文档与本 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 6265 Cookie / Set-Cookie 语义与安全属性 §4 · §5
RFC 9111 §2:A cache might store multiple responses for a request target … Caches differentiate these responses … using information in the Vary response header field.
RFC 9111 §4.1:… MUST NOT use that stored response … unless all … request header fields nominated by Vary … match those fields in the original request.

规范 vs Chrome:按 RFC,alice→bob→alice 第三次 alice 应 HIT(alice 的 variant 仍应保留)。Chrome 对 Vary: Cookie 多 variant 往往不稳定——第三次常 MISS,再点一次 alice 才 HIT。CDN 模拟侧仍会为每个 Session 独立存 key。