デフォルトのキャッシュ動作
→ Cache Rules がない場合の動作
https://developers.cloudflare.com/cache/concepts/default-cache-behavior/
よくあるのがデフォルトで .html はキャッシュされない点に注意。
また、image/png のような MIME タイプには関係なく、あくまで URL の拡張子ベースでキャッシュするかどうかを判断している点に注意。
キャッシュ対象/状態はレスポンスヘッダの cf-cache-status で確認
- cf-cache-status dynamic / BYPASS キャッシュされない
- cf-cache-status hit / miss キャッシュ対象
DYNAMICとはコンテンツがキャッシュ対象外でオリジンへ毎回取得に行くことを表します。似たような挙動を行うものとしてBYPASSというものがありますが、これはリクエスト時のCache-Control headerがno-cache,private, max-age=0にセットされたときの挙動です。
つまり、拡張子毎除外されるのがDYNAMIC、リクエスト単位でヘッダーの指定により除外されるのがBYPASSです。
Cloudflare CDNでデフォルトのキャッシュビヘイビアを変更する方法(HTMLをキャッシュさせる)Page Rules 2023
Cloudflareがサーバーのコンテンツをキャッシュするのは4つの条件があります。
- Cloudflareのネームサーバーを使っている
- Cloudflareのプロキシを利用している
- Cloudflareのキャッシュ対象ファイルである
- オリジンサーバーのブラウザキャッシュTTLが0以上である
この全ての条件が揃っていないとCloudflareはコンテンツをキャッシュしません
例えば Apache で ExpiresByType image/jpg "access plus 7 days" を設定
https://github.com/gregrickaby/The-Perfect-Apache-Configuration/blob/master/http.conf
オリジン応答
< HTTP/1.1 200 OK < Date: Thu, 24 Oct 2024 14:37:40 GMT < Server: Apache < Last-Modified: Sat, 01 Aug 2015 08:02:24 GMT < ETag: "b4eccd9-d459-51c3b5b4d6400" < Accept-Ranges: bytes < Content-Length: 54361 < Cache-Control: max-age=604800 < Expires: Thu, 31 Oct 2024 14:37:40 GMT < Content-Type: image/jpeg
Cloudflare応答 → cf-cache-status: HIT
< HTTP/2 200 < date: Thu, 24 Oct 2024 14:36:29 GMT < content-type: image/jpeg < content-length: 54361 < last-modified: Sat, 01 Aug 2015 08:02:24 GMT < etag: "b4eccd9-d459-51c3b5b4d6400" < cache-control: max-age=604800 < expires: Thu, 31 Oct 2024 08:53:52 GMT < cf-cache-status: HIT < age: 20559 < accept-ranges: bytes ...
※Apache の ExpiresByType が適用されるのは静的ファイルのみ。phpでコンテンツを生成している場合は同じMIMEタイプでも適用されない
mod_expiresが動いていると次の行を追加することでそのMIMEタイプの静的ファイルを転送するときにExpiresヘッダを付加してくれるようだ。
.htaccessからブラウザキャッシュを設定 | tm23forest.com 2020
オリジン Cache-Control ヘッダなし
Cloudflare does cache the resource even if there is no Cache-Control header based on status codes.
https://developers.cloudflare.com/cache/concepts/default-cache-behavior/
オリジン応答
< HTTP/1.1 200 OK < Date: Mon, 04 Nov 2024 07:52:15 GMT < Server: Apache < Last-Modified: Sun, 09 Nov 2014 15:00:00 GMT < ETag: "bb666d-1007-5076e4ccf3c00" < Accept-Ranges: bytes < Content-Length: 4103 < Content-Type: image/png
Cloudflare応答
< HTTP/2 200 < date: Mon, 04 Nov 2024 08:01:21 GMT < content-type: image/png < content-length: 4103 < last-modified: Sun, 09 Nov 2014 15:00:00 GMT < etag: "bb666d-1007-5076e4ccf3c00" < cache-control: max-age=14400 < cf-cache-status: HIT < age: 1266 < accept-ranges: bytes
オリジンで Cache-Control 指定なしの場合
Edge TTL 120m
Browser Cache TTL 4 hours (Caching Configurationで設定)
cache-control: 14400=4hours
Cloudflare の Browser Cache TTL を理解する #cloudflare - Qiita 2024