コンテンツにスキップ

CDN-Cache-Control

CDN-Cache-Controlは、オリジンに設定されるレスポンスヘッダーのフィールドで、CDNキャッシュの動作を他の中間者がレスポンスを処理する際の動作から独立して制御します。CDN-Cache-ControlまたはCloudflare-CDN-Cache-Controlレスポンスヘッダーを、Cache-Controlで使用されるのと同じディレクティブを使って設定できます。

ヘッダーの優先順位

CDN-Cache-ControlディレクティブがCache-Controlディレクティブとどのように相互作用するかを決定するためのいくつかのオプションがあります。

オリジンは次のことができます:

  • CDN-Cache-Controlレスポンスヘッダーを返す。Cloudflareはこれを評価してキャッシュの決定を行います。オリジンからもCache-Controlが返される場合、それはそのままプロキシされ、Cloudflareによるキャッシュの決定には影響しません。さらに、CDN-Cache-ControlはCloudflareとブラウザの間に他のCDNがある場合に下流にプロキシされます。

  • Cloudflare-CDN-Cache-Controlレスポンスヘッダーを返す。この場合、オリジンがCDN-Cache-Controlを返すのと同じ動作になりますが、CloudflareはCloudflare-CDN-Cache-Controlを下流にプロキシしません。これは、Cloudflareだけが異なるキャッシュ動作を持ち、他のすべての下流サーバーがCache-Controlに依存する場合や、CloudflareがCDN-Cache-Controlヘッダーを下流にプロキシしないようにしたい場合に有益です。

  • Cloudflare-CDN-Cache-ControlCDN-Cache-Controlの両方のレスポンスヘッダーを返す。この場合、Cloudflareはキャッシュの決定を行う際にCloudflare-CDN-Cache-Controlのみを参照します。これはCDN-Cache-Controlの最も具体的なバージョンであり、CDN-Cache-Controlを下流にプロキシします。この状況でCDN-Cache-Controlのみを転送することは、Cloudflareが他のCDNとは異なるキャッシュ動作を持つことを望む場合に有益です。

さらに、サロゲートはオリジンからのレスポンス内のCache-Controlヘッダーを尊重しません。たとえば、レスポンス内にSurrogate-Controlヘッダーが存在する場合、CloudflareはCache-Controlディレクティブを無視します。たとえSurrogate-Controlヘッダーにディレクティブが含まれていなくてもです。

他のCloudflare機能との相互作用

Edge Cache TTLキャッシュルール

Edge Cache TTLキャッシュルールは、アセットがエッジ(Cloudflareデータセンター)でキャッシュされる時間を上書きします。このキャッシュルールは、アセットがエッジでキャッシュされる時間を管理するCloudflare-CDN-Cache-Control/CDN-Cache-Controlのディレクティブを上書きします。このルールは、ダッシュボードのCache > Cache Rulesで作成できます。

Browser Cache TTLキャッシュルール

Browser Cache TTLキャッシュルールは、Cloudflareの下流にあるブラウザ/サーバーによってアセットがキャッシュされる時間を上書きします。Browser Cache TTLは、Cache-Controlレスポンスヘッダーのみを変更します。このキャッシュルールは、Cloudflare-CDN-Cache-Control/CDN-Cache-Controlレスポンスヘッダーを変更しません。

その他のオリジンレスポンスヘッダー

オリジンは、オブジェクトがブラウザにとって古くなったと見なされるまでの時間を指定するExpiresレスポンスヘッダーを返します。このレスポンスヘッダーは、Cloudflare-CDN-Cache-Control/CDN-Cache-Controlが使用されている場合、Cloudflareでのキャッシュ決定には影響しません。

Cloudflareデフォルトキャッシュ値

CloudflareがCloudflare-CDN-Cache-ControlCDN-Cache-Control、またはCache-Controlの値を受け取らない場合、キャッシュ可能なアセットは一般的なデフォルト値を使用します。

CDN-Cache-Controlを使用するタイミング

キャッシュされたアセットのTTLを管理する

オリジンキャッシュ、CDNキャッシュ、ブラウザキャッシュのTTLを別々に管理したい場合は、CDN-Cache-Controlを使用します。以下の例は、オリジン設定のレスポンスヘッダーを使用してキャッシュされたアセットのTTLを管理する方法を示しています。

ヘッダー:

  • Cache-Control: max-age=14400, s-maxage=84000
  • Cloudflare-CDN-Cache-Control: max-age=24400
  • CDN-Cache-Control: max-age=18000

キャッシュ動作:

キャッシュ

キャッシュTTL(秒)

オリジンサーバーキャッシュ

14400

ネットワーク共有キャッシュ

84000

Cloudflareエッジ

24400

他のCDN

18000

ブラウザキャッシュ

14400

古いコンテンツを提供するタイミングを指定する

エラーや再検証の際に古いコンテンツを提供するタイミングを指定するために、Cache-Controlヘッダーと組み合わせてCDN-Cache-Controlヘッダーを使用します。以下の例は、エラー処理時にCDNに適用されるヘッダーとディレクティブを設定する方法を示しています。

ヘッダー:

  • Cache-Control: stale-if-error=400
  • Cloudflare-CDN-Cache-Control: stale-if-error=60
  • CDN-Cache-Control: stale-if-error=200

5XXエラーに対する動作:

キャッシュ

エラーに対して提供される古いコンテンツ(秒)

オリジンキャッシュレイヤー/ネットワークキャッシュ/ブラウザキャッシュ

400(ディレクティブが適用されると仮定した場合)

Cloudflareエッジ

60

他のCDN

200