Skip to content

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

Cloudflare のキャッシュレスポンス

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

CF-Cache-Status ヘッダーは、リソースがキャッシュされているかどうかを示します。このヘッダーが返すキャッシュレスポンスを調べるには、Redbotwebpagetest.org、または視覚的なツールである Cloudflare Optics plugin を使います。

以下は、Cloudflare のキャッシュレスポンスステータスの一覧です。

HIT

リソースが Cloudflare のキャッシュで見つかりました。

MISS

レスポンスはキャッシュ対象ですが、リクエスト時点では Cloudflare のキャッシュになく、オリジン Web サーバーから返されました。Cloudflare がキャッシュしないと判断したレスポンスは、MISS ではなく BYPASS になります。

NONE/UNKNOWN

Cloudflare が、アセットがキャッシュ対象外であることを示すレスポンスを生成しました。次のような場合に発生します。

  • Worker がサブリクエストを送らずにレスポンスを生成した。この場合、レスポンスはキャッシュから来ていないため、キャッシュステータスは none/unknown になります。

  • Worker のリクエストがサブリクエスト(fetch)を行った。この場合、サブリクエストにはキャッシュステータスが記録され、メインリクエストは none/unknown になります(Worker はキャッシュの手前にあるため、メインリクエストはキャッシュに当たりません)。

  • WAF カスタムルールがリクエストをブロックした。レスポンスはキャッシュに到達する前に Cloudflare のグローバルネットワークから返されます。キャッシュステータスがないため、Cloudflare は none/unknown として記録します。

  • リダイレクトルール または Always Use HTTPS により、グローバルネットワークが別のアセット / URL へのリダイレクトを返した。このリダイレクトはリクエストがキャッシュに到達する前に起きるため、キャッシュステータスは none/unknown です。

EXPIRED

リソースは Cloudflare のキャッシュで見つかりましたが、期限切れで、オリジン Web サーバーから返されました。

STALE

リソースは期限切れですが、Cloudflare のキャッシュから返されました。Cloudflare は更新済みリソースを取得するためにオリジン Web サーバーへ接続できませんでした。

BYPASS

Cloudflare はリクエスト時点でアセットをキャッシュ対象と見なしました。デフォルトでキャッシュされるファイル拡張子 に一致するか、Cache Rule でキャッシュが有効になっていたためです。ただし、最終的にオリジンのレスポンスはキャッシュできませんでした。

オリジンレスポンスがキャッシュ不可と判断される主な理由は次のとおりです。

  • レスポンスが、ご利用プランの キャッシュ可能な最大ファイルサイズ を超えている。
  • オリジンが Cloudflare-CDN-Cache-Control または CDN-Cache-Control ヘッダーで no-store または単独の private を返した。Cloudflare はこれらのヘッダーを Cache-Control より先に評価します。優先順位は Cloudflare-CDN-Cache-Control > CDN-Cache-Control > Cache-Control です。そのため、オリジンが Cache-Control: public, max-age=3600CDN-Cache-Control: no-store を同時に返すと BYPASS になります。Cache Rule でオリジンの cache-control を無視する Edge Cache TTL を設定している場合は、これらのディレクティブは上書きされます。Cache-Control: no-store の場合と同じです。これらのヘッダーの no-cachemax-age=0s-maxage=0 では BYPASS になりません。最初のリクエストは MISS、その後は REVALIDATED または EXPIRED になります。優先順位のルールは CDN-Cache-Control を参照してください。
  • オリジンが Cache-Control: no-store または private を返した。これらのディレクティブは、Origin Cache Control のどちらのモードでもキャッシュを妨げます。
  • オリジンが Cache-Control: no-cachemax-age=0、または s-maxage=0 を返し、Origin Cache Control が無効(Enterprise プランのデフォルト)である。Origin Cache Control が有効な場合(Free、Pro、Business プランのデフォルト)は、これらのディレクティブにより Cloudflare はレスポンスをキャッシュして再検証するため、REVALIDATED または EXPIRED になります。no-storeno-cache ディレクティブの理解Conditions の表を参照してください。
  • オリジンが Set-Cookie ヘッダーを返した。BYPASS になる具体的な設定は Set-Cookie レスポンスヘッダーと Cache の相互作用 を参照してください。
  • オリジンが Vary: * レスポンスヘッダーを返した。この場合は常にキャッシュをバイパスします。
  • リクエストに Authorization ヘッダーがあり、Origin Cache Control が有効(Free、Pro、Business プランのデフォルト)である。このモードでは、Cache-Controlpublics-maxage、または must-revalidate も含まれている場合にのみキャッシュできます。Origin Cache Control が無効な Enterprise プランでは、Authorization だけではキャッシュを妨げません。

BYPASS は、キャッシュしない判断が レスポンス時点 で行われたことを意味します。リクエストは当初キャッシュ対象でしたが、オリジンのレスポンスまたはレスポンスヘッダーにより、Cloudflare はキャッシュしないよう指示されました。たとえば、"cache": true を設定する Cache Rule はリクエスト時点でキャッシュを有効にしますが、オリジンが Cache-Control: no-store を返すと、レスポンスは BYPASS になります。

キャッシュされるはずの URL で BYPASS が出る場合は、キャッシュされないレスポンスの調査 で手順に沿って切り分けてください。

REVALIDATED

オリジンが条件付きリクエスト(If-Modified-Since または If-None-Match)で、キャッシュ済みリソースに変更がないことを確認し、レスポンスは Cloudflare のキャッシュから返されます。このステータスは同期的な検証パスを表します。リクエストは、オリジンの応答を待ってから返されます。

非同期の stale-while-revalidate では、ほとんどの再検証は UPDATING または HIT を返します。REVALIDATED が見られるのは次の場合です。stale-while-revalidate が設定されていない。または must-revalidateno-cacheOrigin Cache Control が有効な場合)などのディレクティブにより、古いコンテンツの提供が禁止されている。

UPDATING

リソースは期限切れですが、オリジンがバックグラウンドで更新しているあいだ、Cloudflare のキャッシュから返されました。UPDATING は、非同期の stale-while-revalidate による再検証中の想定ステータスです。再検証ウィンドウ中のリクエストは、オリジンを待たずに UPDATING または HIT を受け取ります。

DYNAMIC

Cloudflare はリクエスト時点でアセットをキャッシュ対象外と判断したため、キャッシュ参照なしでオリジン Web サーバーへリクエストが送られました。

次のような場合に発生します。

Cloudflare がキャッシュする内容を変えるには Cache Rules を使います。リクエストがキャッシュ対象になると、CF-Cache-Status ヘッダーはレスポンス時点のキャッシュ判断(HITMISSEXPIREDREVALIDATEDBYPASS など)を反映します。オリジンレスポンスが最終的にキャッシュできない場合は BYPASS を参照してください。

リクエストがキャッシュ対象になるはずなのに DYNAMIC が出る場合は、キャッシュされないレスポンスの調査 を参照してください。

役に立ちましたか?