橙宝书
实战配方

配方:不破坏登录与 API 的 Cache Rules

先绕过登录、账号与写接口,再只缓存公开内容,并用响应头和双客户端验证规则。

编辑与核验:橙宝书编辑团队 ·

RECIPE · 缓存安全约 24 分钟Cache Rules · 登录 · API

安全顺序

先定义绝不能缓存的路径和响应,再为窄范围公开内容开启缓存。登录、账号、购物车、结账、管理后台、带身份的 API 和写请求默认绕过;不要从“Cache Everything 全站打开”开始。

先填这张矩阵

路径类别示例默认动作验证重点
静态指纹资源/assets/app.abc123.js缓存,可使用较长 TTL多次请求变为 HIT,版本 URL 可更新
公开内容/blog/*、公开产品页按源站头或明确规则缓存未登录与不同客户端看到一致公开内容
身份与交易/login/account/*/cart/*/checkout/*绕过Set-Cookie、CSRF、用户数据不进入共享缓存
API/api/*默认绕过;只给明确的公开 GET 单独建规则method、Authorization、Cookie 与响应隐私
管理与预览/admin/*/preview/*绕过草稿和管理响应不被匿名读取

按风险从低到高发布

保存变更前响应头

curl -sS -D before.txt -o /dev/null https://example.com/assets/app.css
curl -sS -D - -o /dev/null https://example.com/account

记录 URL、状态、CF-Cache-StatusCache-ControlSet-CookieVary 和时间。不要先清全站缓存。

建立高优先级绕过规则

先匹配登录、账号、购物车、结账、管理、预览和带身份的 API。写方法不应因为 URL 看起来公开而进入共享缓存。实际条件以当前 Cache Rules 表达式编辑器为准,并把每条规则的业务所有者写进变更记录。

只给一个公开资源集合启用缓存

首轮选择带内容哈希的静态资源,或一个确认不含个人数据的公开路径。不要同时改变缓存键、源站头、TTL 和全部路径;一次只验证一个假设。

分别验证匿名与登录客户端

用无 Cookie 的新会话连续请求两次公开资源,再用两个不同测试账号访问受保护页面。成功标准不仅是公开资源出现 HIT,还包括账号 A 永远看不到账号 B 的内容,登录和 CSRF 流程不被破坏。

再处理过期与重新验证

需要 stale-while-revalidate 时,先理解异步重新验证:过期对象的首个请求可能看到 UPDATINGmust-revalidateproxy-revalidates-maxageno-cache 会影响是否允许提供陈旧响应,应按内容新鲜度与隐私要求决定,而不是只追求命中率。

Cache Everything 可能破坏会话

过度激进的缓存会干扰 Set-Cookie、登录状态和 CSRF。若问题出现在开启全页缓存之后,先缩小或关闭该规则并恢复身份路径,再调查源站;不要通过删除安全 Cookie 来让页面命中缓存。

发布与回滚门禁

  • 规则只覆盖已列出的公开路径,身份路径有更高优先级的绕过。
  • 至少两个测试账号完成登录、退出、查看账号页与写操作。
  • 公开资源在相同 URL 和条件下得到可解释的 MISS → HIT 或重新验证状态。
  • 出现用户数据串读、登录循环、CSRF 失败或异常 Set-Cookie 时,立即停用新规则。
  • 回滚后重复变更前的只读请求,确认响应头与业务恢复。

若响应没有按预期命中,继续按 CF-Cache-Status 排障保留证据。

官方来源

这篇内容帮你完成目标了吗?

内测反馈只在当前浏览器生成,不会自动上传。

本页目录