If-Match - HTTP 编辑
请求首部 If-Match
的使用表示这是一个条件请求。在请求方法为 GET
和 HEAD
的情况下,服务器仅在请求的资源满足此首部列出的 ETag
值时才会返回资源。而对于 PUT
或其他非安全方法来说,只有在满足条件的情况下才可以将资源上传。
ETag
之间的比较使用的是强比较算法,即只有在每一个字节都相同的情况下,才可以认为两个文件是相同的。在 ETag 前面添加 W/
前缀表示可以采用相对宽松的算法。
以下是两个常见的应用场景:
- 对于
GET
和HEAD
方法,搭配Range
首部使用,可以用来保证新请求的范围与之前请求的范围是对同一份资源的请求。如果 ETag 无法匹配,那么需要返回416
(Range Not Satisfiable,范围请求无法满足) 响应。
- 对于其他方法来说,尤其是
PUT
,If-Match
首部可以用来避免更新丢失问题。它可以用来检测用户想要上传的不会覆盖获取原始资源之后做出的更新。如果请求的条件不满足,那么需要返回412
(Precondition Failed,先决条件失败) 响应。
Header type | Request header |
---|---|
Forbidden header name | no |
语法
If-Match: <etag_value> If-Match: <etag_value>, <etag_value>, …
指令
- <etag_value>
- 唯一地表示一份资源的实体标签。标签是由 ASCII 字符组成的字符串,用双引号括起来(如 "675af34563dc-tr34")。前面可以加上 W/ 前缀表示应该采用弱比较算法。
*
- 星号是一个特殊值,可以指代任意资源。
示例
If-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d" If-Match: W/"67ab43", "54ed21", "7892dd" If-Match: *
规范
Specification | Title |
---|---|
RFC 7232, section 3.1: If-Match | Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests |
浏览器兼容性
BCD tables only load in the browser
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.
相关内容
ETag
If-Unmodified-Since
If-Modified-Since
If-None-Match
416
Range Not Satisfiable
412
Precondition Failed
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论