メインコンテンツまでスキップ

6. Precedence (優先順位)

リクエストに複数の条件付きリクエストヘッダーフィールドが存在する場合, フィールドが評価される順序が重要になります。実際には, この文書で定義されたフィールドは一貫して単一の論理的な順序で実装されています。"失われた更新" の前提条件はキャッシュ検証よりも厳密な要件を持ち, エンティティタグは日付値よりも正確であると推定されるためです。

受信者のキャッシュまたはオリジンサーバーは, この仕様で定義されたリクエストの前提条件を以下の順序で評価しなければなりません (MUST):

  1. 受信者がオリジンサーバーで If-Match が存在する場合, If-Match 前提条件を評価:

    • true の場合, ステップ 3 に進む
    • false の場合, 412 (Precondition Failed) で応答。ただし, 状態変更リクエストが既に成功していると判断できる場合を除く (セクション 3.1 参照)
  2. 受信者がオリジンサーバーで, If-Match が存在せず, If-Unmodified-Since が存在する場合, If-Unmodified-Since 前提条件を評価:

    • true の場合, ステップ 3 に進む
    • false の場合, 412 (Precondition Failed) で応答。ただし, 状態変更リクエストが既に成功していると判断できる場合を除く (セクション 3.4 参照)
  3. If-None-Match が存在する場合, If-None-Match 前提条件を評価:

    • true の場合, ステップ 5 に進む
    • GET/HEAD で false の場合, 304 (Not Modified) で応答
    • 他のメソッドで false の場合, 412 (Precondition Failed) で応答
  4. メソッドが GET または HEAD で, If-None-Match が存在せず, If-Modified-Since が存在する場合, If-Modified-Since 前提条件を評価:

    • true の場合, ステップ 5 に進む
    • false の場合, 304 (Not Modified) で応答
  5. メソッドが GET で, RangeIf-Range の両方が存在する場合, If-Range 前提条件を評価:

    • true で Range 仕様が選択された表現に適用可能な場合, 206 (Partial Content) で応答 [RFC7233]
    • それ以外の場合, Range ヘッダーフィールドを無視して 200 (OK) で応答
  6. それ以外の場合,

    • リクエストされたメソッドを実行し, その成功または失敗に応じて応答。

追加の条件付きリクエストヘッダーフィールドを定義する HTTP の拡張は, この文書で定義された条件付きリクエストヘッダーフィールドに対する独自の評価順序を定義すべきです。拡張フィールドが標準条件ヘッダーフィールドの優先順位を再定義すること, または標準フィールドの評価結果に依存することを許可すると, 曖昧または一貫性のない動作につながります。