このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

If-None-Match ヘッダー

Baseline 広く利用可能

この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2015年7月以降、すべてのブラウザーで利用可能です。

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

GET および HEAD メソッドにおいて条件が満たされない場合、サーバーは 304 Not Modified を返し、かつ、同じリクエストに対する 200 レスポンスで送信されるはずだったヘッダーフィールド Cache-ControlContent-LocationDateETagExpiresVary のいずれかを返さなければなりません。 サーバー側で変更を適用するメソッドの場合、条件が満たされなかった際には 412 Precondition Failed が使用されます。

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

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

リクエストで If-None-Match を使用する一般的なケースは、次の 2 つがあります。

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

構文

http
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 を使用するリソースのアップロードの場合、その識別子を持つ別なリソースがすでにアップロードされていることをする場合にのみ有用です。

http
If-None-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d"

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

If-None-Match: *

仕様書

仕様書
HTTP Semantics
# field.if-none-match

ブラウザーの互換性

関連情報