客户可以根据源站 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。
默认情况下,当不存在 cache-control 指令或 expires 响应标头时,Cloudflare 会按以下 Edge Cache TTL 缓存某些 HTTP 响应码。
| HTTP status code | Default TTL |
|---|---|
| 200, 206, 301 | 120m |
| 302, 303 | 20m |
| 404, 410 | 3m |
所有其他状态码默认不缓存。
要按响应状态设置 cache TTL,请创建 Cache Rule以设置按状态码的 Cache TTL。
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_range:from和to的整数值。status_code_range匹配指定范围内源站 Web 服务器的任何状态码。value:定义资源有效持续时间的整数值(秒),或以下字符串之一:no-store(等同于-1)、no-cache(等同于0)。
cacheTtlByStatus 选项是 cacheTtl 功能的变体,为请求的响应状态码指定 cache TTL(例如 { "200-299": 86400, 404: 1, "500-599": 0 })。
-
如果没有为状态码
304显式设置 TTL,我们会自动将其设置为与状态码200的 TTL 匹配(如果用户已为200定义了一个)。 -
如果用户为
304显式设置与200不同的 TTL,将发生以下行为:
- 收到
200响应时,资源以状态200指定的 TTL 缓存。 - 资源过期并与源站重新验证后,如果源站返回
304,cache TTL 将更新为为304设置的值。
例如,如果用户为状态 200 指定一小时的 TTL,为状态 304 指定 0 秒(缓存并始终重新验证),资源将被缓存 1 小时。过期后,我们与源站重新验证。如果源站返回 304,每个后续请求将触发重新验证。如果源站继续返回 304,此循环将持续。
除非用户有特定用例,否则此行为可能不理想。因此,用户应确保 304 的 TTL 与 200 的 TTL 匹配,除非他们有意需要此行为。