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-ControlとCDN-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ヘッダーにディレクティブが含まれていなくてもです。
Edge Cache TTLキャッシュルールは、アセットがエッジ(Cloudflareデータセンター)でキャッシュされる時間を上書きします。このキャッシュルールは、アセットがエッジでキャッシュされる時間を管理するCloudflare-CDN-Cache-Control/CDN-Cache-Controlのディレクティブを上書きします。このルールは、ダッシュボードのCache > Cache Rulesで作成できます。
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-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 |
エラーや再検証の際に古いコンテンツを提供するタイミングを指定するために、Cache-Controlヘッダーと組み合わせてCDN-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 |