如何在 Cloudflare 中配置缓存级别为忽略查询字符串

文章导读
对于静态资源版本控制场景,建议在 Cloudflare 缓存规则中将查询字符串设置为忽略,但需严格避开动态内容路径。
📋 目录
  1. 快速处理思路
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

对于静态资源版本控制场景,建议在 Cloudflare 缓存规则中将查询字符串设置为忽略,但需严格避开动态内容路径。

先说结论:该配置适合静态资源版本化管理,能显著提升缓存命中率,但错误配置会导致动态业务数据错乱

  • 适合:图片、CSS、JS 等带版本参数的静态文件
  • 先准备:确认业务是否存在依赖查询字符串的动态内容(如搜索、API)
  • 验收:通过不同查询字符串访问同一资源,确认返回内容一致且命中缓存

快速处理思路

登录 Cloudflare Dashboard,进入 Caching 页面。若需全局调整,在 Configuration 中修改 Caching level 为 Ignore Query String(仅对部分静态扩展名生效);若需精细控制,建议使用 Cache Rules 创建规则,针对特定路径设置 Cache Key 的 Query String 为 Ignore。

为什么会这样

Cloudflare 默认将完整 URL 包括查询字符串作为缓存键。当静态资源带有版本参数(如 style.css?v=1)时,每次修改参数都会生成新缓存键,导致旧缓存失效。忽略查询字符串后,相同路径的不同参数请求会命中同一缓存文件,减少回源请求。

分步处理

1. 登录 Cloudflare 控制台,选择对应域名。

2. 左侧菜单选择 Caching > Cache Rules,点击 Create rule

3. 设置匹配条件(When incoming requests match):例如 Hostname contains "example.com" 或 URI Path 匹配静态资源目录(如 ends with .css 或 starts with /static/)。

4. 在 Then 部分,Cache eligibility 选择 Eligible for cache

5. 点击 Edit expression 或找到 Cache key 设置区域。

如何在 Cloudflare 中配置缓存级别为忽略查询字符串

6. 在 Query string 选项中,选择 Ignore query string。注意此处会将所有查询参数排除在缓存键之外。

7. 保存并部署规则(Deploy)。

怎么验证是否生效

使用命令行工具 curl 查看响应头,确认缓存状态。分别执行以下命令:

curl -I -H "Cache-Control: no-cache" "https://example.com/style.css?v=1"
curl -I "https://example.com/style.css?v=2"

检查响应头中 cf-cache-status 是否为 HIT。第二次请求即使参数不同,若配置生效且缓存已建立,应直接命中缓存。

常见坑

1. 动态内容误缓存:搜索页或 API 接口若依赖查询字符串返回不同数据,忽略参数会导致用户看到错误内容。务必在匹配条件中排除动态路径。

2. 全局限制:全局 Caching level 的 Ignore Query String 通常仅针对静态文件扩展名生效,非静态扩展名可能不生效,推荐用 Cache Rules。

3. 免费版限制:若使用 Page Rules 实现,免费版仅支持 3 条规则,需谨慎分配;Cache Rules 在免费版中也有数量限制,请合理规划。

参考来源

  • Cloudflare 官方文档:Caching levels
  • Cloudflare 官方文档:Cache keys
  • Cloudflare 官方文档:Cache Rules