HTTPキャッシュヘッダの基礎と使い方
HTTPキャッシュはブラウザやCDNがサーバーのレスポンスを保存し、次回のリクエスト時にその保存済みレスポンスを再利用することでネットワーク通信を削減する仕組みである。キャッシュの動作を制御する主なHTTPヘッダはCache-ControlとETag、Last-Modifiedである。適切なキャッシュ設定を行うことで、繰り返しのリクエストによるサーバー負荷を軽減しながら、ユーザーへの応答速度を高速化できる。
Cache-Controlヘッダはキャッシュの有効期間と保存場所を指示する。no-storeはキャッシュを一切保存しないよう指示し、no-cacheはキャッシュを保存するが再利用前にオリジンへの検証を要求する。publicはCDNなどの共有キャッシュへの保存を許可し、privateはブラウザのみに保存を許可してCDNには保存させないことを指示する。これらのディレクティブを適切に組み合わせることで、コンテンツの種類に応じたキャッシュ戦略を実現できる。stale-while-revalidateディレクティブを使えば、期限切れのキャッシュをバックグラウンドで更新しながらユーザーには古いキャッシュを即座に返すことで、表示速度と鮮度の両立を図ることも可能である。
ETagはリソースの特定バージョンを識別するためのトークンであり、サーバーはレスポンスにETagヘッダを付与する。次回のリクエスト時にブラウザはIf-None-Matchヘッダに前回のETag値を付けて送信し、サーバー上のリソースが変更されていなければ304 Not Modifiedを返してレスポンスボディの送信を省略できる。これにより帯域幅を節約しつつ、コンテンツの鮮度を保つことができる。Last-Modifiedヘッダも同様の条件付きリクエストに使われるが、ETagはバイト単位の正確な変更検知が可能であるため、精度が求められる場面ではETagを優先して使うことが推奨される。