304 Not Modified
HTTP 304 Not Modified
リダイレクトレスポンスステータスコードは、リクエストされたリソースを再送する必要がないことを示します。
このレスポンスコードは、リクエストが条件付きの GET
や HEAD
リクエストに If-None-Match
もしくは If-Modified-Since
ヘッダーが付いており、条件が 'false' と評価された時に送信されます。
これは、クライアントがキャッシュしたリソースがまだ有効であり、条件が 'true' と評価された場合、サーバーはリソースとともに 200 OK
レスポンスを送信したであろうことを確認します。
詳細については、 HTTP キャッシュを参照してください。
レスポンスには本体を含んではならず、 200
レスポンスで送信されるであろう次のようなヘッダーを記載しなければなりません。
メモ:
多くのブラウザーの開発ツールのネットワークパネルは 304
レスポンスにつながる追加のリクエストを作成するため、開発者はローカルキャッシュへのアクセスを見ることができます。
ステータス
304 Not Modified
例
条件付きリクエストに対する 304 レスポンス
下記の例は、条件付きリクエストヘッダーつきの curl を使用して作成された GET
リクエストを示しています。
--http1.1
フラグは、読みやすくするために HTTP/1.1 プロトコルを強制するために使用されています。
最初のリクエストは、If-Modified-Since
条件を使用して未来の日付である 2050 年 11 月 21 日を設定しています。
これは false
と評価されるはずです。まだ現れていない時点以降にリソースが更新されることはありえないからです。
curl --http1.1 -I --header 'If-Modified-Since: Tue, 21 Nov 2050 08:00:00 GMT' \
https://developer.mozilla.org/en-US/
これにより、次のような HTTP リクエストが発生します。
GET /en-US/ HTTP/1.1
Host: developer.mozilla.org
User-Agent: curl/8.7.1
Accept: */*
If-Modified-Since: Tue, 21 Nov 2050 08:00:00 GMT
リソースが If-Modified-Since
ヘッダーのタイムスタンプ後に更新された場合、現在のリソースバージョンではレスポンスは 200 OK
となりるはずです。
代わりに 304
レスポンスを取得し、そのレスポンスには ETag
、Age
、Expires
の各ヘッダーが含まれ、リソースのキャッシュされたバージョンが最新であることを示します。
HTTP/1.1 304 Not Modified
Date: Wed, 28 Aug 2024 09:52:35 GMT
Expires: Wed, 28 Aug 2024 10:01:53 GMT
Age: 3279
ETag: "b20a0973b226eeea30362acb81f9e0b3"
Cache-Control: public, max-age=3600
Vary: Accept-Encoding
X-cache: hit
Alt-Svc: clear
それでは、別の curl
コマンドを実行し、前回レスポンスで取得した etag
値を If-None-Match
条件とともに使用します(この etag
はサーバー上のリソースの最新バージョンであるため、 304 Not Modified
レスポンスが返されると予想されます)。
curl --http1.1 -I --header 'If-None-Match: "b20a0973b226eeea30362acb81f9e0b3"' \
https://developer.mozilla.org/en-US/
これにより、次のような HTTP リクエストが発生します。
GET /en-US/ HTTP/1.1
Host: developer.mozilla.org
User-Agent: curl/8.7.1
Accept: */*
If-None-Match: "b20a0973b226eeea30362acb81f9e0b3"
リクエスト時点では etag
の値が一致するため、エンティティタグは条件に合わず、304
レスポンスが返されます。
HTTP/1.1 304 Not Modified
Date: Wed, 28 Aug 2024 10:36:35 GMT
Expires: Wed, 28 Aug 2024 11:02:17 GMT
Age: 662
ETag: "b20a0973b226eeea30362acb81f9e0b3"
Cache-Control: public, max-age=3600
Vary: Accept-Encoding
X-cache: hit
Alt-Svc: clear
仕様書
Specification |
---|
HTTP Semantics # status.304 |
互換性メモ
このレスポンスが永続的な接続上で誤って本文を含んだ場合、ブラウザーの動作はさまざまです。
詳しくは 204 No Content
を参照してください。