--- title: If-Match slug: Web/HTTP/Headers/If-Match tags: - 条件请求 - 首部 translation_of: Web/HTTP/Headers/If-Match ---
请求首部 If-Match
的使用表示这是一个条件请求。在请求方法为 {{HTTPMethod("GET")}} 和 {{HTTPMethod("HEAD")}} 的情况下,服务器仅在请求的资源满足此首部列出的 ETag
值时才会返回资源。而对于 {{HTTPMethod("PUT")}} 或其他非安全方法来说,只有在满足条件的情况下才可以将资源上传。
{{HTTPHeader("ETag")}} 之间的比较使用的是强比较算法,即只有在每一个字节都相同的情况下,才可以认为两个文件是相同的。在 ETag 前面添加 W/
前缀表示可以采用相对宽松的算法。
以下是两个常见的应用场景:
(Range Not Satisfiable,范围请求无法满足) 响应。If-Match
首部可以用来避免更新丢失问题。它可以用来检测用户想要上传的不会覆盖获取原始资源之后做出的更新。如果请求的条件不满足,那么需要返回 {{HTTPStatus("412")}} (Precondition Failed,先决条件失败) 响应。Header type | {{Glossary("Request header")}} |
---|---|
{{Glossary("Forbidden header name")}} | no |
If-Match: <etag_value> If-Match: <etag_value>, <etag_value>, …
*
If-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d" If-Match: W/"67ab43", "54ed21", "7892dd" If-Match: *
Specification | Title |
---|---|
{{RFC("7232", "If-Match", "3.1")}} | Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests |
The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
{{Compat("http.headers.If-Match")}}
Range Not Satisfiable
Precondition Failed