If-None-Match header

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

HTTP If-None-Match 請求頭使請求條件化。伺服器只在沒有匹配 If-None-Match 頭中任何 ETag 的情況下,才會在 GETHEAD 方法中返回所請求的資源,並附帶 200 狀態。對於其他方法,請求只在最終存在的資源的 ETag 不匹配所列出的任何值時才會被處理。

GET304 Not Modified 狀態,以及任何在 200 響應中會發送的以下頭欄位:Cache-ControlContent-LocationDateETagExpiresVary。對於應用於伺服器端更改的方法,當條件失敗時,使用 412 Precondition Failed

與儲存的 ETag 的比較使用弱比較演算法,這意味著如果內容等效,則認為兩個檔案是相同的——它們不必逐位元組相同。例如,兩個僅在頁尾建立日期不同的頁面仍會被認為是相同的。

當與 If-Modified-Since 結合使用時,如果伺服器支援,If-None-Match 具有優先權。

在請求中使用 If-None-Match 有兩種常見情況:

  • 對於 GETPUTIf-None-Match* 值一起使用,可以在檔案尚不存在時才儲存檔案,從而確保上傳不會意外覆蓋其他上傳並丟失之前 PUT 的資料;這個問題是丟失更新問題的一種變體。
頭型別 請求頭
禁止請求頭

語法

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 語義
# field.if-none-match

瀏覽器相容性

另見