概述
按 URL 清除缓存需要知道所有变体:查询字符串、语言前缀、设备路径以及不同表示形式。缓存标签是附加在响应上的数据依赖标记,一次 product-42 清除就能让该产品的所有缓存变体失效,只要源站正确输出了标签。
步骤
- 在源站响应中输出标签头,每个响应包含实体标签、集合标签和发布标签:
add_header Cache-Tag "product-$arg_id,category-all,deploy-2026-10-21" always;
add_header Cache-Control "public, max-age=300" always;
- 数据提交成功后调用 CDN API 按标签清除:
curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$CF_ZONE_ID/purge_cache" \
-H "Authorization: Bearer $CF_API_TOKEN" \
-H "Content-Type: application/json" \
--data '{"tags":["product-42"]}'
- 发布完成后清除一次部署标签,让该次构建产生的所有页面刷新。
- 连续请求两次并检查响应头:
curl -sI https://shop.example.com/products/42 | grep -i -E "cf-cache-status|cache-tag"。
验证
预期第一次请求显示 cf-cache-status: MISS,第二次显示 HIT。再用带查询参数的变体请求一次,确认标签同样生效。发布标签大规模清除后观察源站 QPS,若出现回源风暴,应配合请求合并或短暂 stale 窗口。
注意事项
- 标签区分大小写,必须与清除请求完全一致,中间层不得剥离
Cache-Tag。 - 单次清除的标签数量有上限(Cloudflare 为 30 个),相关标签应合并提交。
- 清除在各 PoP 间异步传播,少数节点可能短暂返回旧内容。
- 不要在提交前清除,否则缓存未命中会重新填入旧值;应按实体、集合、发布三类标签建立固定词表。