304 Not Modified 【HTTP 304】

概要

304 Not Modified(HTTP 304)とは、WebサーバからWebブラウザなどのクライアントへ送られるHTTPステータスコードの一つで、要求されたコンテンツは前回送信以降更新されていないことを示すもの。クライアントのキャッシュ制御のために用いられる。

WebサーバとWebブラウザなどのクライアントの間ではHTTPHypertext Transfer Protocol)という通信規約(プロトコル)でデータ伝送を行っている。クライアントからの要求(リクエスト)に対してサーバは応答(レスポンス)を返すが、その際に現在の状態を示すHTTPステータスコードを通知する。

ステータスコードの300番台はリダイレクト(転送)関連の用途に割り当てられており、304番は「Not Modified」、すなわち「変更なし」を表す。クライアントへ一度送信したことがあるコンテンツについて、前回送信時から内容が変更されていないことを通知するもので、コンテンツ本体は送信しない。

Webブラウザなどには一度受信したコンテンツを保管しておき、次に必要になったときストレージから読み込む「キャッシュ」(cache)の仕組みがある。サーバはコンテンツの送信時、送信日時(Date)、最終更新日時(Last-Modified)、バージョン識別子(ETag)などをヘッダ中に記載しており、クライアントはこれを控えておく。

クライアントは同じコンテンツを再度要求する際、前回取得時に受け取ったこれらの情報をサーバに申告する。サーバは前回送信時から更新されているかを判断し、更新されていれば「200 OKステータスコードとともにコンテンツ本体を送り、更新されていなければ「304 Not Modified」のみを応答してコンテンツは送らない。

(2023.1.20更新)

HTTPステータスコード一覧

*1 302はHTTP/1.0では「Moved Temporarily」だった。
*2 413はHTTP/1.1では「Request Entity Too Long」、RFC 7231では「Payload Too Long」だった。
*3 414はHTTP/1.1では「Request-URI Too Long」だった。
*4 416はHTTP/1.1では「Requested Range Not Satisfiable」だった。
*5 418は1998年エイプリルフールのジョークRFC 2324で「I'm a teapot」として定義されていた。