场景说明
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 面板怎么看
- 同 user 点两次 → 第二次 Size 应为
(disk cache)或(memory cache),Time ≈ 0ms - 换 user → Size 为完整字节数(如 3.7 kB),走网络
- 切到 no-store 模式 → 同 user 重复点也不会出现 disk cache
alice→bob→alice:规范应 HIT;Chrome 常第三次 MISS、第四次 HIT(见下方 RFC 说明)
规范依据(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 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.
规范 vs Chrome:按 RFC,alice→bob→alice 第三次 alice
应 HIT(alice 的 variant 仍应保留)。Chrome 对 Vary: Cookie 多 variant 往往不稳定——第三次常 MISS,再点一次 alice 才 HIT。CDN 模拟侧仍会为每个 Session 独立存 key。