CloudflareでのETagヘッダーの使用
ETagヘッダーは、ブラウザにキャッシュされたリソースのバージョンがウェブサーバー上のリソースと同じであるかどうかを識別します。訪問者のブラウザはETagを保存します。訪問者がサイトを再訪問すると、ブラウザは保存した各ETagと比較します。一致する値は、キャッシュされたリソースのバージョンが最新であることを示す304 Not-Modified HTTPレスポンスを引き起こします。Cloudflareは、オリジンウェブサーバーで設定された強いETagと弱いETagの両方をサポートしています。
弱いETagヘッダーは、キャッシュされたリソースがウェブサーバー上のバージョンと意味的に同等であるが、必ずしもバイト単位で同一であるわけではないことを示します。
強いETagヘッダーは、ブラウザのキャッシュ内のリソースとウェブサーバー上のリソースがバイト単位で同一であることを保証します。Cache Rulesを使用して強いETagヘッダーを有効にします。
キャッシュルールでRespect Strong ETagsを有効にすると、Cloudflareは強いETagヘッダーの検証を使用して、Cloudflareのキャッシュ内のリソースとオリジンサーバー上のリソースがバイト単位で同一であることを確認します。
ただし、特定の状況ではCloudflareが強いETagを弱いETagに変換することがあります。例えば、次の条件がある場合:
- Respect Strong ETagsが有効
- Brotli圧縮が有効
- オリジンサーバーのレスポンスに
etag: "foobar"という強いETagヘッダーが含まれている
Cloudflareネットワークは、訪問者のaccept-encodingヘッダーとオリジンサーバーのレスポンスで使用される圧縮に応じて、次のアクションを取ります:
accept-encoding訪問者からのヘッダー | オリジンサーバーのレスポンスで使用される圧縮 | Cloudflareのアクション |
|---|---|---|
gzip, br | GZIP | 強いETagヘッダーを持つGZIP圧縮レスポンスを訪問者に返します:etag: "foobar"。 |
gzip, br | Brotli | 強いETagヘッダーを持つBrotli圧縮レスポンスを訪問者に返します:etag: "foobar"。 |
br | GZIP | GZIPを解凍し、弱いETagヘッダーを持つ未圧縮レスポンスを訪問者に返します:etag: W/"foobar"。 |
gzip | Brotli | Brotliを解凍し、弱いETagヘッダーを持つ未圧縮レスポンスを訪問者に返します:etag: W/"foobar"。 |
gzip | (none) | 強いETagヘッダーを持つ未圧縮レスポンスを訪問者に返します:etag: "foobar"。 |
CloudflareでRespect Strong ETagsを有効にすると、Rocket Loader、Email Obfuscation、Automatic HTTPS Rewrites、およびMirageが自動的に無効になります。
Respect Strong ETagsが無効な場合、Cloudflareは次のすべての条件が適用される場合に、オリジンサーバーによって設定された強いETagヘッダーを保持します:
- オリジンサーバーがGZIPまたはBrotliを使用して圧縮されたレスポンス、または未圧縮のレスポンスを送信します。
- オリジンサーバーが圧縮レスポンスを送信する場合、訪問者は
accept-encodingヘッダーに従って同じ圧縮(GZIP、Brotli)を受け入れます。 - Rocket LoaderおよびEmail Obfuscation機能が無効です。
他のすべての状況では、Cloudflareは強いETagヘッダーを弱いETagヘッダーに変換するか、強いETagを削除します。例えば、次の条件がある場合:
- Respect Strong ETagsが無効
- Brotli圧縮が有効
- オリジンサーバーのレスポンスに
etag: "foobar"という強いETagヘッダーが含まれている
Cloudflareネットワークは、訪問者のaccept-encodingヘッダーとオリジンサーバーのレスポンスで使用される圧縮に応じて、次のアクションを取ります:
accept-encoding訪問者からのヘッダー | オリジンサーバーのレスポンスで使用される圧縮 | Cloudflareのアクション |
|---|---|---|
gzip, br | GZIP | GZIPを解凍し、弱いETagヘッダーを持つBrotli圧縮レスポンスを訪問者に返します(Brotli圧縮が有効なため):etag: W/"foobar"。 |
gzip, br | Brotli | 強いETagヘッダーを持つBrotli圧縮レスポンスを訪問者に返します:etag: "foobar"。 |
br | GZIP | GZIPを解凍し、Brotli圧縮レスポンスを訪問者に返しますが、弱いETagヘッダーを持ちます:etag: W/"foobar"。 |
gzip | Brotli | Brotliを解凍し、GZIP圧縮レスポンスを訪問者に返しますが、弱いETagヘッダーを持ちます:etag: W/"foobar"。 |
gzip | (none) | オリジンレスポンスをGZIPで圧縮し、弱いETagヘッダーを持って訪問者に返します:etag: W/"foobar"。 |
-
強いETagヘッダーの値は二重引用符で設定する必要があります(例えば、
etag: "foobar")。不正な形式を使用すると、CloudflareはETagヘッダーを弱いETagに変換するのではなく、削除します。 -
リソースがキャッシュ可能でキャッシュミスが発生した場合、CloudflareはオリジンサーバーにETagヘッダーを送信しません。これは、Cloudflareがキャッシュを満たすために完全なレスポンスボディを必要とするためです。