If-Match 頭

Baseline 已廣泛支援

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

HTTP If-Match 請求頭使請求有條件。伺服器只會在資源與 If-Match 請求頭中任何一個 ETag 值匹配時,才會返回 GETHEAD 方法的資源,或上傳 PUT 及其他非安全方法的資源。如果條件不匹配,則返回 412 Precondition Failed 響應。

與儲存的 ETag 進行比較時,使用的是強比較演算法,這意味著兩個檔案被視為逐位元組相同。如果列出的 ETag 帶有表示弱實體標籤的 W/ 字首,則此比較演算法將永遠不匹配它。

有兩個常見的用例

  • 對於 GETHEAD 方法,與 Range 頭結合使用時,它可以保證請求的新範圍來自與前一個相同的資源。
  • 對於其他方法,特別是 PUTIf-Match 可以用來防止丟失更新問題。它可以檢查使用者想要上傳的資源修改是否會覆蓋自原始資源被獲取以來所做的其他更改。
頭型別 請求頭
禁止請求頭

語法

http
If-Match: <etag_value>
If-Match: <etag_value>, <etag_value>, …

指令

<etag_value>

實體標籤唯一標識所請求的資源。它們是包含在雙引號之間的 ASCII 字串(例如 "675af34563dc-tr34")。它們可能帶有 W/ 字首,表示它們是“弱”的,即它們在語義上而非逐位元組地代表資源。然而,在 If-Match 頭中,弱實體標籤永遠不會匹配。

*

星號是一個特殊值,表示任何資源。請注意,如果源伺服器沒有目標資源的當前表示,則此值必須匹配為 false

示例

http
If-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d"

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

If-Match: *

規範

規範
HTTP 語義
# field.if-match

瀏覽器相容性

另見