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 を参照してください。