CDN-Cache-Control は、オリジンで設定するレスポンスヘッダーです。応答を扱うほかの中間キャッシュと別に、CDN キャッシュの動作を制御できます。CDN-Cache-Control または Cloudflare-CDN-Cache-Control レスポンスヘッダーには、Cache-Control と同じディレクティブを使えます。
CDN-Cache-Control ディレクティブと Cache-Control ディレクティブの関係は、いくつかの方法で決められます。
Cache Response Rule が set_cache_control アクションで Cache-Control ディレクティブを設定している場合、そのディレクティブがオリジンで設定した Cloudflare-CDN-Cache-Control および CDN-Cache-Control ヘッダーより優先されます。
Cache Response Rule が適用されない場合、オリジンは次のいずれかを返せます。
-
CDN-Cache-Controlレスポンスヘッダーを返すと、Cloudflare はこのヘッダーを評価してキャッシュ判断をします。オリジンがCache-Controlも返す場合、そのヘッダーはそのままプロキシされ、Cloudflare のキャッシュ判断には使いません。さらに、Cloudflare とブラウザーの間にほかの CDN がある場合に備え、CDN-Cache-Controlは下流にもプロキシされます。 -
Cloudflare-CDN-Cache-Controlレスポンスヘッダーを返します。動作はオリジンがCDN-Cache-Controlを返す場合と同じですが、Cloudflare-CDN-Cache-Controlは Cloudflare 専用のヘッダーのため、下流にはプロキシしません。Cloudflare だけキャッシュ動作を変え、下流のサーバーはCache-Controlに従わせたい場合や、CDN-Cache-Controlを下流にプロキシしたくない場合に向いています。 -
Cloudflare-CDN-Cache-ControlとCDN-Cache-Controlの両方を返します。この場合、Cloudflare はキャッシュ判断にCloudflare-CDN-Cache-Controlだけを使います。これがCDN-Cache-Controlのもっとも具体的な版だからです。下流にはCDN-Cache-Controlをプロキシします。下流のほかの CDN と Cloudflare でキャッシュ動作を分けたい場合に、この方法が向いています。
また、サロゲートはオリジン応答の Cache-Control ヘッダーに従いません。たとえば、応答に Surrogate-Control ヘッダーがある場合、そのヘッダーにディレクティブがなくても、Cloudflare は Cache-Control ディレクティブを無視します。
Edge Cache TTL の Cache Rule は、エッジ(Cloudflare のデータセンター)でアセットをキャッシュする時間を上書きします。エッジでのキャッシュ期間を決める Cloudflare-CDN-Cache-Control / CDN-Cache-Control のディレクティブより、このルールが優先されます。ダッシュボードの Caching > Cache Rules で作成できます。
Browser Cache TTL の Cache Rule は、Cloudflare より下流のブラウザーやサーバーがアセットをキャッシュする時間を上書きします。Browser Cache TTL が変更するのは Cache-Control レスポンスヘッダーだけです。Cloudflare-CDN-Cache-Control / CDN-Cache-Control は変更しません。
オリジンが返す Expires レスポンスヘッダーは、ブラウザーがオブジェクトを古いとみなすまでの時間を指定します。Cloudflare-CDN-Cache-Control / CDN-Cache-Control を使っている場合、このヘッダーは Cloudflare のキャッシュ判断に影響しません。
Cloudflare が Cloudflare-CDN-Cache-Control、CDN-Cache-Control、Cache-Control のいずれも受け取らない場合、キャッシュ可能なアセットは一般的な デフォルト値 を使います。
オリジンキャッシュ、CDN キャッシュ、ブラウザーキャッシュで、キャッシュ済みアセットの TTL を別々に管理したいときに CDN-Cache-Control を使います。次の例は、オリジンが返すレスポンスヘッダーで TTL を管理する方法です。
ヘッダー:
Cache-Control: max-age=14400, s-maxage=84000Cloudflare-CDN-Cache-Control: max-age=24400CDN-Cache-Control: max-age=18000
キャッシュの動作:
キャッシュ | キャッシュ TTL(秒) | ||||||||
|---|---|---|---|---|---|---|---|---|---|
オリジンサーバーキャッシュ | 14400 | ||||||||
ネットワーク共有キャッシュ | 84000 | ||||||||
Cloudflare エッジ | 24400 | ||||||||
ほかの CDN | 18000 | ||||||||
ブラウザーキャッシュ | 14400 |
エラー時や再検証中にステールコンテンツを配信する条件は、CDN-Cache-Control ヘッダーと Cache-Control ヘッダーを組み合わせて指定します。次の例は、エラー処理時に CDN へ適用するヘッダーとディレクティブの設定です。
ヘッダー:
Cache-Control: stale-if-error=400Cloudflare-CDN-Cache-Control: stale-if-error=60CDN-Cache-Control: stale-if-error=200
5XX エラー への応答時の動作:
キャッシュ | エラー時に配信するステール(秒) | ||||||||
|---|---|---|---|---|---|---|---|---|---|
オリジンキャッシュ層 / ネットワークキャッシュ / ブラウザーキャッシュ | 400(ディレクティブが適用されるとみなす場合) | ||||||||
Cloudflare エッジ | 60 | ||||||||
ほかの CDN | 200 |