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

浏览器兼容性

另见