哪些内容不能缓存
接口响应与个性化页面不应被共享缓存:同一个 URL 对不同用户返回不同内容,一旦被边缘节点缓存,就会出现数据串号。做法有两类——在 CDN 侧把接口路径配置为不缓存,或由源站下发 Cache-Control: no-store 或 private 并要求 CDN 遵循源站策略。涉及隐私数据的响应必须同时禁止共享缓存。
基本信息
| 方式一 | CDN 规则中把接口路径设置为不缓存 |
|---|---|
| 方式二 | 源站响应头下发 Cache-Control: no-store 或 private |
| 注意 | 部分产品可配置是否遵循源站缓存头,需核对实际行为 |
| 验证方式 | 连续两次请求,观察是否都回源且不被缓存 |
| 隐私要求 | 含用户信息的响应必须禁止共享缓存 |
典型使用场景
- 登录态接口返回用户数据,必须确保不被共享缓存
- 带查询参数的列表接口,不同参数内容不同,需要按规则区分
- 后台管理页面被缓存导致展示过期数据,需要配不缓存
- 排查数据串号:确认是否存在接口被缓存的情况
- 支付与订单类接口,禁止任何形式的中间缓存
验证不缓存行为
验证不缓存行为
# 源站下发的缓存头
curl -sI https://origin.example.com/api/user | grep -i -E 'cache-control|expires'
# 经 CDN 的响应,确认未被边缘缓存
curl -sI https://cdn.example.com/api/user | grep -i -E 'cache-control|age|x-cache'
# 连续两次请求,age 不应持续增长,命中状态应为回源缓存头语义
| 指令 | 含义 | 适用场景 |
|---|---|---|
| no-store | 完全不存储 | 支付、订单等敏感接口 |
| private | 仅浏览器可缓存 | 个性化页面 |
| no-cache | 可存储但每次需校验 | 需要实时性的接口 |
| max-age | 可缓存时长 | 公开内容按需设置 |
面向登录用户的响应建议统一使用 private 或 no-store,避免被边缘节点缓存后出现数据串号。
源站下发了不缓存头,但 CDN 侧配置为忽略源站缓存头时,规则会被覆盖,必须核对产品的实际优先级。
隐私接口检查项
- 响应头带 no-store 或 private
- CDN 侧把接口路径配置为不缓存
- 上线后连续两次请求验证都回源
- 确认没有出现来自边缘缓存的数据串号