Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

ステータスコード別にキャッシュする

最終更新 Markdown で表示Agent セットアップ

オリジンウェブサーバーのレスポンスステータスに基づいて、キャッシュの有効期間(TTL)を設定できます。キャッシュ TTL は、リソースが Cloudflare ネットワーク上で STALE とマークされる、またはキャッシュから破棄されるまでの時間です。ステータスコードは、リソースのオリジンが返します。

レスポンスステータスに基づくキャッシュ TTL の設定は、静的ファイルの デフォルトキャッシュ動作(標準キャッシュ) を上書きし、オリジンウェブサーバーが送るキャッシュ指示も上書きします。静的でないアセットをキャッシュするには、Cache Rule で Cache Level を Cache Everything にしますno-storeCache-Control、または短い TTL(max-age / s-maxage)を設定すると、オリジンウェブサーバーへのリクエストが増え、性能が下がります。

キャッシュ上限

Free、Pro、Business のお客様のキャッシュ上限はファイルあたり最大 512 MB、Enterprise のお客様はファイルあたり最大 5 GB です。上限を上げる必要がある場合は、担当チームに連絡してください。

Edge TTL

デフォルトでは、cache-control ディレクティブまたは expires レスポンスヘッダーがない場合、Cloudflare は特定の HTTP レスポンスコードを次の Edge Cache TTL でキャッシュします。

HTTP ステータスコード デフォルト TTL
200, 206, 301 120m
302, 303 20m
404, 410 3m

その他のステータスコードは、デフォルトではキャッシュされません。

Cloudflare ダッシュボードでレスポンスステータス別にキャッシュ TTL を設定する

レスポンスステータス別にキャッシュ TTL を設定するには、Cache TTL by status code 向けの Cache Rule を作成 します。

Cloudflare API でレスポンスステータス別にキャッシュ TTL を設定する

リクエストbash
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: 200500 などの整数値です。status_code は、オリジンウェブサーバーからのステータスコードと完全一致します。有効なステータスコードは 100〜999 です。
  • status_code_range: fromto の整数値です。status_code_range は、指定範囲内のオリジンウェブサーバーのステータスコードに一致します。
  • value: アセットが有効な秒数を表す整数、または次のいずれかの文字列です。no-store-1 と同等)、no-cache0 と同等)。

Cloudflare Worker でレスポンスステータス別にキャッシュ TTL を設定する

cacheTtlByStatus オプションは、cacheTtl 機能の一種で、リクエストのレスポンスステータスコードごとにキャッシュ TTL を指定します(例: { "200-299": 86400, 404: 1, "500-599": 0 })。

ステータスコード 304 と 200 の TTL の扱い

  1. ステータスコード 304 に TTL を明示していない場合、ステータスコード 200 の TTL(200 用に定義していれば)に自動で揃えます。

  2. 304200 と異なる TTL を明示した場合、次の動作になります。

  • 200 レスポンスを受け取ると、アセットはステータス 200 用の TTL でキャッシュされます。
  • アセットの期限が切れ、オリジンと再検証したあと、オリジンが 304 を返すと、キャッシュ TTL は 304 用の値に更新されます。

たとえば、ステータス 200 の TTL を 1 時間、ステータス 304 を 0 秒(キャッシュして常に再検証)にした場合、アセットは 1 時間キャッシュされます。期限切れのあとオリジンと再検証します。オリジンが 304 を返すと、以降の各リクエストで再検証が走ります。オリジンが 304 を返し続けると、このサイクルが続きます。

特定の用途がない限り、この動作は望ましくないことが多いです。意図してこの動作が必要な場合を除き、304 の TTL は 200 の TTL に揃えてください。

役に立ちましたか?