有効期限、最終更新日時、ETag キャッシュ仕組み
有効期限、最終変更日時とEtagはすべて、ウェブブラウザーでキャッシュするために使われるメカニズムです。
- Expiresヘッダ: キャッシュされたリソースの有効期限を表し、期限以降はリソースを期限切れとみなして使用されなくなります。ブラウザはサーバにリクエストを行う前にExpiresヘッダを確認し、現在の日時が指定の日時よりあとの場合はサーバにリクエストを送信し、リソースの最新バージョンを取得します。この仕組みは、指定された有効期限までリソースが変更されないという仮定に基づいています。
- Last-Modified: サーバーがリソースの要求に応答して送信するヘッダーで、リソースが最後に変更された日時が含まれています。ブラウザは、このヘッダーを受信すると、日時を格納します。ブラウザが次に同じリソースを取得する必要があるとき、格納された日時を含む If-Modified-Since ヘッダーを使用してサーバーに要求を送信します。指定された日時以降リソースが変更されていない場合、サーバーは 304 Not Modified ステータスコードで応答し、ブラウザはキャッシュされたリソースバージョンを使用します。変更されている場合は、サーバーは更新されたリソースバージョンを送信します。
- Etag: Etag(エンティティタグ)ヘッダーは、サーバーがリソースの特定のバージョンを識別するためのもう1つの方法です。通常、リソースのコンテンツに基づいてサーバーによって生成されたハッシュまたは一意の識別子です。Last-Modifiedヘッダーと同様に、ブラウザはEtagヘッダーを受信するとその値を格納します。ブラウザが同じリソースを取得する必要がある次の時に、格納されたEtag値を含むIf-None-Matchヘッダーを伴うリクエストをサーバーに送信します。Etag値がサーバー上のリソースの現在のバージョンと一致する場合、サーバーは304 Not Modifiedステータスコードで応答し、ブラウザはキャッシュされたバージョンを使用します。Etag値が一致しない場合、サーバーはリソースの更新されたバージョンを送信します。
Last-Modified と Etag はいずれも、リソースのキャッシュされたバージョンが有効かどうかを検証するために使用されますが、アプローチが異なります。Last-Modified はサーバーのリソースの最終更新タイムスタンプに依存しますが、Etag はサーバーで生成される一意の識別子に依存します。