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

如何自动刷新Cloudflare缓存以优化GCP API响应速度?

解决Cloudflare中stale-while-revalidate不生效的问题

针对你的场景,要实现缓存过期后返回 stale 内容同时后台异步更新缓存,得从Cloudflare缓存配置、源站响应头两个核心维度排查调整,具体步骤如下:

1. 确保Cloudflare允许缓存你的API路径

Cloudflare默认不会缓存API类请求(尤其是带动态参数或POST方法的),必须通过缓存规则明确开启:

  • 登录Cloudflare仪表盘,进入「缓存」->「缓存规则」,新建规则
  • 匹配条件设为你的API路径(比如your-domain.com/api/*)
  • 缓存行为设置:
    • 「缓存状态」选择「缓存」
    • 「缓存级别」根据需求选:如果API带查询参数且不同参数返回不同内容,选「包含所有查询字符串」;否则选「忽略查询字符串」
    • 若你的API是POST请求(仅适用于幂等场景),需额外勾选「缓存POST请求」

2. 修正源站(GCP API)的Cache-Control响应头

stale-while-revalidate生效的前提是源站返回格式正确且无冲突的响应头:

  • 必须包含public指令(Cloudflare作为共享缓存,不会缓存private标记的内容)
  • 配合max-age定义缓存新鲜期,stale-while-revalidate定义允许返回过期内容的时间窗口
  • 禁止出现must-revalidate、no-cache、no-store这类会强制回源的指令

示例正确的响应头:

Cache-Control: public, max-age=3600, stale-while-revalidate=86400

解释:

  • max-age=3600:缓存新鲜1小时,这段时间直接返回缓存(CF-Cache-Status: HIT)
  • stale-while-revalidate=86400:新鲜期过后的24小时内,Cloudflare优先返回过期缓存(CF-Cache-Status: STALE),同时异步向GCP API拉取最新内容更新缓存

3. 检查Cloudflare全局缓存设置

  • 关闭「开发模式」:在「缓存」->「开发模式」确保开关处于关闭状态(开发模式会绕过所有缓存)
  • 边缘缓存TTL设置为「尊重源站头」:在「缓存」->「缓存规则」或「默认缓存行为」中,让Cloudflare遵循源站返回的max-age,不要强行覆盖为固定值

4. 验证生效状态

用curl或浏览器开发者工具查看响应头的CF-Cache-Status字段:

  • 首次请求:CF-Cache-Status: MISS(缓存未命中,回源并存储缓存)
  • max-age有效期内:CF-Cache-Status: HIT(直接返回新鲜缓存)
  • 超过max-age但在stale窗口内:CF-Cache-Status: STALE(返回过期缓存,后台异步更新)

5. 排查特殊冲突

  • 检查GCP API是否返回ETag或Last-Modified头:这两个头能让Cloudflare在后台验证时,通过304 Not Modified减少回源带宽,提升更新效率
  • 检查是否有其他Cloudflare规则(如页面规则)覆盖缓存设置:优先级高的页面规则可能会忽略缓存规则的配置,需调整规则优先级或删除冲突规则

内容的提问来源于stack exchange,提问作者Alexandre Schaffner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 19:03:09