Last-Modified
使い方
Last-Modified ヘッダーは、条件付きリクエストにおける弱い検証子として機能します。クライアントが Last-Modified を含むレスポンスをキャッシュすると、クライアントはそのタイムスタンプを保存し、以降のリクエストで If-Modified-Since リクエストヘッダーにその日付を返します。サーバーは保存された日付をリソースの現在の更新時刻と比較します。リソースが変更されていなければ、サーバーはボディのない 304 Not Modified を返します。リソースが変更されていれば、サーバーは更新後のレスポンス全体を送ります。
If-Unmodified-Since ヘッダーは、PUT や DELETE のような安全でないメソッドにおける前提条件の確認に同じタイムスタンプを使い、指定した日付以降にリソースが変更されていた場合は 412 Precondition Failed を返します。
Last-Modified の日付は ETag よりも精度が劣ります。タイムスタンプの粒度は 1 秒なので、同じ秒内の変更は日付ベースの検証では見えません。ETag ヘッダーは、正確なコンテンツに結び付いたより強い検証子を提供します。レスポンスに Last-Modified と ETag の両方が存在する場合、再検証では ETag が優先されます。
日付の値は HTTP-date 形式に従います。曜日名、2 桁の日、省略形の月、4 桁の年、時・分・秒の時刻、その後に GMT が続きます。形式は Weekday, DD Mon YYYY HH:MM:SS GMT です。
Last-Modified: Fri, 04 Sep 1998 19:15:56 GMT
注意
ETag は Last-Modified よりも精密です。ETag は 1 秒未満の変更も含めてあらゆる変化を検出できるのに対し、Last-Modified の粒度は 1 秒です。Last-Modified はサーバー間の時計のずれの影響を受けますが、コンテンツのハッシュに基づく ETag は負荷分散された複数のインスタンス間で可搬性があります。両方が存在する場合は If-None-Match(ETag)が If-Modified-Since に優先するため、互換性を最大化するには両方のヘッダーを併用してください。
注意
Google のクロール基盤は、HTTP のキャッシュ標準で定義されたとおりに Last-Modified と If-Modified-Since をサポートします。解析上の問題を避けるため、Last-Modified の日付は HTTP-date 形式に従う必要があります。Cache-Control レスポンスヘッダーの max-age フィールドに、コンテンツが変更されないと見込まれる秒数を設定しておくと、クローラーがいつ URL を再クロールすべきかを判断しやすくなります。例えば Cache-Control: max-age=94043 のようにします。
例
リソースの更新日時を伴うレスポンスです。クライアントは将来の条件付きリクエストのためにこのタイムスタンプを保存します。
Last-Modified: Wed, 01 Jun 2022 08:00:00 GMT
条件付きリクエストの一連の流れです。サーバーは最初のレスポンスで Last-Modified を送ります。次のリクエストで、クライアントはそのタイムスタンプを If-Modified-Since に反映します。リソースが変更されていなければ、サーバーは 304 を返します。
HTTP/1.1 200 OK
Last-Modified: Wed, 01 Jun 2022 08:00:00 GMT
Cache-Control: max-age=86400
Content-Type: text/html
以降のリクエストでは次のようになります。
GET /page HTTP/1.1
If-Modified-Since: Wed, 01 Jun 2022 08:00:00 GMT
変更がない場合のサーバーのレスポンスです。
HTTP/1.1 304 Not Modified
Last-Modified: Wed, 01 Jun 2022 08:00:00 GMT
Cache-Control: max-age=86400
Last-Modified と ETag を組み合わせたレスポンスです。ETag は強い検証子を提供し、更新日時は日付ベースの検証しかサポートしないクライアント向けのフォールバックを提供します。
Last-Modified: Fri, 22 Nov 2024 14:30:00 GMT
ETag: "a1b2c3d4"
Cache-Control: max-age=3600
注意
SEO とキャッシュに関する支援については、元 Google の SEO コンサルタント Search Brothers にご相談ください。