オリジンウェブサーバーのレスポンスステータスに基づいて、キャッシュの有効期間(TTL)を設定できます。キャッシュ TTL は、リソースが Cloudflare ネットワーク上で STALE とマークされる、またはキャッシュから破棄されるまでの時間です。ステータスコードは、リソースのオリジンが返します。
レスポンスステータスに基づくキャッシュ TTL の設定は、静的ファイルの デフォルトキャッシュ動作(標準キャッシュ) を上書きし、オリジンウェブサーバーが送るキャッシュ指示も上書きします。静的でないアセットをキャッシュするには、Cache Rule で Cache Level を Cache Everything にします。no-store の Cache-Control、または短い TTL(max-age / s-maxage)を設定すると、オリジンウェブサーバーへのリクエストが増え、性能が下がります。
Free、Pro、Business のお客様のキャッシュ上限はファイルあたり最大 512 MB、Enterprise のお客様はファイルあたり最大 5 GB です。上限を上げる必要がある場合は、担当チームに連絡してください。
デフォルトでは、cache-control ディレクティブまたは expires レスポンスヘッダーがない場合、Cloudflare は特定の HTTP レスポンスコードを次の Edge Cache TTL でキャッシュします。
| HTTP ステータスコード | デフォルト TTL |
|---|---|
| 200, 206, 301 | 120m |
| 302, 303 | 20m |
| 404, 410 | 3m |
その他のステータスコードは、デフォルトではキャッシュされません。
レスポンスステータス別にキャッシュ TTL を設定するには、Cache TTL by status code 向けの Cache Rule を作成 します。
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 オブジェクトを渡します。ステータス別キャッシュ TTL の Cache Rule における各キーと値の組の構文は次のとおりです。
status_code:200や500などの整数値です。status_codeは、オリジンウェブサーバーからのステータスコードと完全一致します。有効なステータスコードは 100〜999 です。status_code_range:fromとtoの整数値です。status_code_rangeは、指定範囲内のオリジンウェブサーバーのステータスコードに一致します。value: アセットが有効な秒数を表す整数、または次のいずれかの文字列です。no-store(-1と同等)、no-cache(0と同等)。
cacheTtlByStatus オプションは、cacheTtl 機能の一種で、リクエストのレスポンスステータスコードごとにキャッシュ TTL を指定します(例: { "200-299": 86400, 404: 1, "500-599": 0 })。
-
ステータスコード
304に TTL を明示していない場合、ステータスコード200の TTL(200用に定義していれば)に自動で揃えます。 -
304に200と異なる TTL を明示した場合、次の動作になります。
200レスポンスを受け取ると、アセットはステータス200用の TTL でキャッシュされます。- アセットの期限が切れ、オリジンと再検証したあと、オリジンが
304を返すと、キャッシュ TTL は304用の値に更新されます。
たとえば、ステータス 200 の TTL を 1 時間、ステータス 304 を 0 秒(キャッシュして常に再検証)にした場合、アセットは 1 時間キャッシュされます。期限切れのあとオリジンと再検証します。オリジンが 304 を返すと、以降の各リクエストで再検証が走ります。オリジンが 304 を返し続けると、このサイクルが続きます。
特定の用途がない限り、この動作は望ましくないことが多いです。意図してこの動作が必要な場合を除き、304 の TTL は 200 の TTL に揃えてください。