You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cloudflare API缓存配置问题:新用户无法获取缓存响应

Cloudflare API缓存未按预期生效排查

问题描述

配置Cloudflare页面规则后,API响应未在边缘节点一致缓存,仅部分用户能获取缓存内容,新用户无法命中预期缓存。

当前配置详情

Cloudflare页面规则

  • Incoming Request Matching:自定义过滤表达式
  • Cache Eligibility:可缓存
  • Edge TTL:若存在则使用Cache-Control头,否则绕过缓存
  • Browser TTL:遵循源站TTL
  • Cache Key Settings:
    • Cache deception armor:已禁用
    • Cache by device type:已禁用
    • Ignore query string:已禁用
    • Sort query string:已启用
  • Serve Stale Content While Revalidating:已启用
  • Do not serve stale content while updating:已禁用
  • Respect Strong ETags:未勾选
  • Origin Error Page Pass-through:未勾选
  • Placement:第一条规则

API响应头

Cache-Control: max-age=300, public,s-maxage=600

排查与修正建议

1. 页面规则匹配有效性验证

  • 确认自定义过滤表达式完全覆盖目标API端点,包括域名、路径、HTTP方法(Cloudflare默认仅缓存GET/HEAD请求,若API用POST需额外配置缓存规则),避免语法错误或范围遗漏导致规则未触发。
  • 使用Cloudflare内置的规则匹配测试工具,模拟真实请求验证是否能命中该页面规则。

2. Cache Key 碎片化问题

  • 未启用Ignore query string时,每个不同的查询参数组合都会生成独立缓存键,如果API请求带有用户唯一标识、随机参数等,会直接导致缓存碎片化,新用户因参数差异无法共享已有缓存。
    • 若API响应不依赖查询参数,直接启用Ignore query string;若仅部分参数影响响应,可配置自定义缓存键,只保留必要参数作为缓存键组成部分。

3. Edge TTL 规则冲突检查

  • 当前设置依赖源站Cache-Control头,但需确认:
    • s-maxage=600未被其他页面规则、Cache Rules或Cloudflare默认行为覆盖;
    • 源站未返回no-cache/no-store等禁用缓存的隐含指令;
    • 无优先级更高的规则(比如后续页面规则)修改了缓存TTL设置。

4. 用户专属标识导致缓存隔离

  • 检查API请求是否携带用户专属Cookie/请求头(如Authorization、含用户ID的Cookie),Cloudflare默认会将这类标识加入缓存键,导致每个用户的缓存完全独立。
    • 若API响应为公共内容,需在页面规则中配置忽略特定Cookie/请求头,将其从缓存键中排除,实现跨用户缓存共享。

5. 缓存状态直接验证

  • 用curl -I [API端点URL]请求查看响应头,重点关注CF-Cache-Status字段:
    • HIT:命中缓存;MISS:未命中;BYPASS:缓存被绕过;EXPIRED:缓存过期
    • 若频繁出现BYPASS,需排查缓存 eligibility 设置或源站是否存在禁用缓存的头信息。

6. 其他潜在配置问题

  • 确认API端点未被Cloudflare默认标记为动态内容(如后台管理路径),确保当前页面规则优先级高于默认缓存行为;
  • 检查缓存>缓存规则中的缓存级别,确认设置为“标准缓存”而非“不缓存”或“基本缓存”。

内容的提问来源于stack exchange,提问作者Jayant Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 10:07:46