跳转到内容
搜索文档

按状态码缓存

最后更新 查看 MarkdownAgent 设置

客户可以根据源站 Web 服务器的响应状态设置 cache time-to-live (TTL)。Cache TTL 是指资源在 Cloudflare 网络中在被标记为 STALE 或从缓存中丢弃之前持续的时间。状态码由资源的源站返回。

根据响应状态设置 cache TTL 会覆盖静态文件的默认缓存行为(标准缓存)并覆盖源站 Web 服务器发送的缓存指令。要缓存非静态资源,请使用 Cache Rule 设置 Cache Everything。设置 no-store Cache-Control 或低 TTL(使用 max-age/s-maxage)会增加对源站 Web 服务器的请求并降低性能。

缓存限制

Free、Pro 和 Business 客户的最大缓存限制为每个文件 512 MB,Enterprise 客户的最大缓存限制为每个文件 5 GB。如果您需要提高限制,请联系您的 Customer Success Manager。

Edge TTL

默认情况下,当不存在 cache-control 指令或 expires 响应标头时,Cloudflare 会按以下 Edge Cache TTL 缓存某些 HTTP 响应码。

HTTP status code Default TTL
200, 206, 301 120m
302, 303 20m
404, 410 3m

所有其他状态码默认不缓存。

通过 Cloudflare 仪表板按响应状态设置 cache TTL

要按响应状态设置 cache TTL,请创建 Cache Rule以设置按状态码的 Cache TTL

通过 Cloudflare API 按响应状态设置 cache TTL

Requestbash
curl --request PUT \
"https://api.cloudflare.com/client/v4/zones/{zone_id}/rulesets/{ruleset_id}" \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
  "rules": [
    {
      "expression": "(http.host eq \"www.example.com\")",
      "description": "set cache TTL by response status",
      "action": "set_cache_settings",
      "action_parameters": {
        "cache": true,
        "edge_ttl": {
          "status_code_ttl": [
            {
              "status_code_range": {
                "to": 299
              },
              "value": 86400
            },
            {
              "status_code_range": {
                "from": 300,
                "to": 499
              },
              "value": 0  // no-cache
            },
            {
              "status_code_range": {
                "from": 500
              },
              "value": -1  // no-store
            }
          ],
          "mode": "respect_origin"
        }
      }
    }
  ]
}'

语法

提供包含状态码及其对应 TTL 的 JSON 对象。按状态码 cache TTL cache rule 中的每个键值对具有以下语法:

  • status_code:整数值,如 200 或 500。status_code 匹配源站 Web 服务器的确切状态码。有效状态码在 100-999 之间。
  • status_code_rangefromto 的整数值。status_code_range 匹配指定范围内源站 Web 服务器的任何状态码。
  • value:定义资源有效持续时间的整数值(秒),或以下字符串之一:no-store(等同于 -1)、no-cache(等同于 0)。

通过 Cloudflare Worker 按响应状态设置 cache TTL

cacheTtlByStatus 选项是 cacheTtl 功能的变体,为请求的响应状态码指定 cache TTL(例如 { "200-299": 86400, 404: 1, "500-599": 0 })。

304 和 200 状态码的 TTL 处理

  1. 如果没有为状态码 304 显式设置 TTL,我们会自动将其设置为与状态码 200 的 TTL 匹配(如果用户已为 200 定义了一个)。

  2. 如果用户为 304 显式设置与 200 不同的 TTL,将发生以下行为:

  • 收到 200 响应时,资源以状态 200 指定的 TTL 缓存。
  • 资源过期并与源站重新验证后,如果源站返回 304,cache TTL 将更新为为 304 设置的值。

例如,如果用户为状态 200 指定一小时的 TTL,为状态 304 指定 0 秒(缓存并始终重新验证),资源将被缓存 1 小时。过期后,我们与源站重新验证。如果源站返回 304,每个后续请求将触发重新验证。如果源站继续返回 304,此循环将持续。

除非用户有特定用例,否则此行为可能不理想。因此,用户应确保 304 的 TTL 与 200 的 TTL 匹配,除非他们有意需要此行为。

这篇文档对您有帮助吗?