CloudflareのTTL
TTL設定の優先順位
CloudflareのTTLの決定には、CloudflareのWorkersやPage Rule、デフォルトキャッシュなどが複雑に関与しています。
その判定をチャートで説明します。
CloudflareのTTL判定チャート
CloudflareのTTL(Time To Live: キャッシュ有効期限)は、以下のチャートに従い決定されます。
ExpiresとCache-Control
キャッシュの有効期限については、絶対時間指定のExpiresヘッダと相対時間指定のCache-Controlヘッダがあります。
- Expires
- キャッシュの有効期限を"Thu, 23 Apr 2020 06:59:00 GMT"というように日時で指定する
- Cache-Control
- キャッシュの有効期限を"max-age=86400"というように、ファイルを取得してからの相対時間で指定する
上記のチャートにある通り、Cloudflareは、WorkersやPage RuleでTTLを定めていない場合には、オリジンサーバのExpiresヘッダやCache-Controlヘッダを尊重します。
時折、Expiresヘッダで絶対キャッシュ有効期限とCache-Controlヘッダのmax-ageで相対キャッシュ有効期限を併記されているWebサイトが見受けられます。
RFC7234の規定により、双方を併記した場合には、Expiresヘッダは無視されます。
Cloudflareは、RFCの規定を遵守し、上記に該当する場合に、Expiresヘッダを無視します。
If a response includes a Cache-Control field with the max-age directive (Section 5.2.2.8), a recipient MUST ignore the Expires field.
レスポンスにmax-ageディレクティブ付のCache-Controlフィールドが含まれている場合は、受信側はExpiresフィールドを無視しなくてはいけない。
理想としては、"max-age"ではなく、中間プロキシのキャッシュ時間指定フィールド"s-max-age"で値を定めて下さい。
Webブラウザは、"s-max-age"の値は無視します。
Webブラウザのキャッシュ有効期限は、ExpiresかCache-Controlの"max-age"で指定します。
PublicとPrivate
Cach-Controlヘッダには、中間プロキシにキャッシュを許可するかどうかを指定するPublicとPrivateのいずれかのディレクティブを指定する事が可能です。
- Public
- どんなファイルもキャッシュして良いという意思を示します。通常はキャッシュできないファイルや、プライベートキャッシュにしかキャッシュできないファイルもキャッシュ可能とします。
- Private
- その対象ユーザのみがキャッシュできて、共有キャッシュではキャッシュできないという意思を示します。
当然ながら、Cloudflareは、Publicディレクティブが付与されたものについてキャッシュします。
Privateディレクティブが付与されたファイルはキャッシュしません。
まとめ
- Cache-Controlヘッダが private、no-store、no-cache、max-age=0 に設定されている場合、またはレスポンスにcookieがある場合、Cloudflareはリソースをキャッシュしません。
- そうでない場合、Cache-Controlがpublicに設定されていて max-ageが0より大きい場合、またはExpiresヘッダが将来の日付である場合、Cloudflareはリソースをキャッシュします。
- max-ageとExpiresヘッダの両方が設定されている場合、max-ageが使用されます。
- max-ageとs-max-ageの両方が設定されている場合、s-max-ageが使用されます。
お問い合わせフォーム
本サービスのご相談やお見積り、事例についてなど、お気軽にお問い合わせ下さい。