If-None-Match

HTTP の If-None-Match リクエストヘッダーは、リクエストを条件付きにします。 GET および HEAD メソッドの場合、指定されたものの中に要求されたリソースの ETag に一致するものがない場合のみ、サーバーはリソースを 200 ステータスで返します。その他のメソッドの場合、最終的に存在するリソースの ETag が列挙されたいずれの値とも一致しない場合にのみ処理します。

GET および HEAD メソッドの場合、条件が満たされなかったら、サーバーは HTTP ステータスコード 304 (Not Modified) を返さなければなりません。サーバー側の変更を適用するメソッドの場合、ステータスコード 412 (Precondition Failed) が使用されます。なお、 304 レスポンスを生成するサーバーは、 Cache-Control, Content-Location, Date, ETag, Expires, Vary の各ヘッダーフィールドについて、同じリクエストに対して 200 (OK) レスポンスで送信されるものを生成しなければなりません。

格納されている ETag との比較では、弱い比較アルゴリズムを使用、つまり二つのファイルの内容が同等であれば等しいとみなします。バイト単位で等しい必要はありません。たとえば、フッターの作成日が異なる二つのページは、同一と見なされます。

If-Modified-Since と一緒に使用した場合、 If-None-Match が優先されます (サーバーが対応している場合)。

一般的な使用例は二つあります。

  • GET および HEAD メソッドの場合は、関連付けられた ETag を持つキャッシュされたエンティティを更新するため。
  • 他のメソッド、特に PUT の場合、 If-None-Match* 値と共に使用され、存在するかどうか分かっていないファイルを保存する際に、以前他のアップロードが行われておらず、以前 PUT されたデータを失わないことを保証するために使用することができます。この問題は、 lost update problem の一種です。
ヘッダー種別 リクエストヘッダー
禁止ヘッダー名 いいえ

構文

If-None-Match: "<etag_value>"
If-None-Match: "<etag_value>", "<etag_value>", …
If-None-Match: *

ディレクティブ

<etag_value>
リクエストされたリソースを一意に表すエンティティタグです。二重引用符の間に置かれた ASCII 文字列 ("675af34563dc-tr34" など) であり、 W/ の接頭辞を付けると、弱い比較アルゴリズムを使用するべきであることを示すことができます (このアルゴリズムだけを使用する場合は If-None-Match では意味がありません)。
*
アスタリスクは任意のリソースを表す特殊な値です。通常 PUT を使用するリソースのアップロードの場合、その識別子を持つ別なリソースがすでにアップロードされていることをする場合にのみ有用です。

If-None-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d"

If-None-Match: W/"67ab43", "54ed21", "7892dd"

If-None-Match: *

仕様書

仕様書 題名
RFC 7232, セクション 3.2: If-None-Match Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests

ブラウザーの互換性

BCD tables only load in the browser

関連情報