4. Status Code Definitions (ステータスコード定義)
4.1. 304 Not Modified (未更新)
304 (Not Modified) ステータスコードは, 条件付き GET または HEAD リクエストが受信され, 条件が false と評価されたという事実がなければ 200 (OK) 応答になっていたであろうことを示します。言い換えれば, リクエストが条件付きリクエストを行ったクライアントが既に有効な表現を持っていることを示しているため, サーバーはターゲットリソースの表現を転送する必要がありません。したがって, サーバーはクライアントをリダイレクトして, その保存された表現を 200 (OK) 応答のペイロードであるかのように使用させます。
304 応答を生成するサーバーは, 同じリクエストに対する 200 (OK) 応答で送信されたであろう以下のヘッダーフィールドのいずれかを生成しなければなりません (MUST): Cache-Control, Content-Location, Date, ETag, Expires, および Vary。
304 応答の目標は, 受信者が既に1つ以上のキャッシュされた表現を持っている場合に情報転送を最小限に抑えることであるため, 送信者は上記にリストされたフィールド以外の表現メタデータを生成すべきではありません (SHOULD NOT)。ただし, そのメタデータがキャッシュ更新をガイドする目的で存在する場合は除きます (例えば, 応答に ETag フィールドがない場合, Last-Modified が有用な場合があります)。
304 応答を受信するキャッシュに対する要件は [RFC7234] のセクション 4.3.4 で定義されています。条件付きリクエストが, 共有プロキシに条件付き GET を送信する独自のキャッシュを持つユーザーエージェントなどのアウトバウンドクライアントから発信された場合, プロキシはその 304 応答をそのクライアントに転送すべきです (SHOULD)。
304 応答にはメッセージボディを含めることはできません。常にヘッダーフィールドの後の最初の空行で終了します。
4.2. 412 Precondition Failed (前提条件失敗)
412 (Precondition Failed) ステータスコードは, サーバーでテストされたときに, リクエストヘッダーフィールドで指定された1つ以上の条件が false と評価されたことを示します。この応答コードにより, クライアントは現在のリソース状態 (その現在の表現とメタデータ) に前提条件を設定でき, ターゲットリソースが予期しない状態にある場合にリクエストメソッドが適用されるのを防ぐことができます。