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-Control、Content-Location、Date、ETag、Expires、Vary のいずれかを返さなければなりません。
サーバー側で変更を適用するメソッドの場合、条件が満たされなかった際には 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 の一種です。
| ヘッダー種別 | リクエストヘッダー |
|---|---|
| 禁止リクエストヘッダー | いいえ |
構文
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: *
仕様書
| 仕様書 |
|---|
| HTTP Semantics> # field.if-none-match> |
ブラウザーの互換性
関連情報
ETagIf-Match,If-Modified-Since,If-Unmodified-Since条件付きリクエストヘッダー304 Not Modified,412 Precondition Failedレスポンスステータスコード