キャッシュされたアセットの有効期限が切れると、Cloudflare は Cache-Control の stale-while-revalidate ディレクティブを見て、オリジンから新しいコピーを取得しているあいだに古いアセットを出し続けてよいかを判断します。ディレクティブがあり、アセットが許容された古さの範囲内なら、Cloudflare は期限切れのコンテンツを訪問者に出し、バックグラウンドで再検証します。If-Modified-Since や ETag などのヘッダーを使い、コンテンツを丸ごと再取得せずに検証するため、オリジンへのトラフィックを減らせます。
再検証は完全に非同期です。キャッシュされたアセットの有効期限が切れ、stale-while-revalidate が設定されている場合、期限切れ後の最初のリクエストがバックグラウンドの再検証を開始します。そのリクエストは、オリジンの応答を待たずに、UPDATING ステータス付きの古いコンテンツをすぐ受け取ります。オリジンが応答するまで、続くリクエストも UPDATING ステータス付きの古いコンテンツを受け取ります。再検証が終わると、以降のリクエストは HIT ステータス付きの新しいコンテンツを受け取ります。
古いコンテンツがまだ有効なら、Cloudflare は新しい TTL を設定します。コンテンツが変わっていれば、オリジンが新しいコンテンツを返し、古いものを置き換えます。
再検証中に古いコンテンツを出すのは、オリジンの Cache-Control ヘッダーに stale-while-revalidate ディレクティブがある場合だけです。このディレクティブがなければ、訪問者はオリジンの応答を待ってからコンテンツを受け取ります。
オリジンが stale-while-revalidate を設定していても上書きしたい場合は、Cache Rules の Serve stale content while revalidating 設定で、古いコンテンツの配信を無効にできます。
Origin Cache Control が有効なとき、次の Cache-Control ディレクティブがあると、Cloudflare は RFC 9111 §4.2.4 ↗ に従い、古いコンテンツを出しません。
must-revalidate— 古いコンテンツの配信を禁止します。キャッシュは先にオリジンと再検証する必要があります。proxy-revalidate—must-revalidateと同じですが、共有キャッシュ(Cloudflare など)にだけ適用されます。s-maxage—proxy-revalidateの意味を含むため、共有キャッシュは古いコンテンツを出せません。no-cache— キャッシュ済みレスポンスを出す前に再検証が必要です。
これらのディレクティブが stale-while-revalidate と一緒にある場合、Cloudflare は古いコンテンツを出しません。リクエストは UPDATING ではなく EXPIRED を返します。
利用できるすべてのディレクティブ、または Origin Cache Control が無効なときの動作は、Cache-Control ディレクティブ を参照してください。
オリジンサーバーのレスポンスに Last-Modified ↗ と Etag ↗ の両方がない場合、Smart Edge Revalidation は、オブジェクトが Cloudflare のグローバルネットワークにキャッシュされた時刻を Last-Modified ヘッダー値として使います。ブラウザーが If-Modified-Since または If-None-Match で Cloudflare に再検証リクエストを送ると、グローバルネットワークは Smart Edge Revalidation が生成した Last-Modified ヘッダーで応答できます。こうして、オリジンからヘッダーが送られない場合でも、効率よく再検証できます。