If-Match

If-Match HTTP 请求头使请求具有条件性。

服务器仅当资源与列出的 ETag 值之一匹配时,才会返回针对 GETHEAD 方法的请求资源,或针对 PUT 及其他非安全方法的上传资源。如果条件不匹配,则返回 412(前提条件失败)响应。

与存储的 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

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅