If-Match
If-Match
If-Match
HTTP 请求报头使得所述请求为条件。对于GET
和HEAD
方法,服务器将只在与请求的资源匹配时发回请求的资源ETags
。对于PUT
和其他非安全方法,在这种情况下它只会上传资源。
与存储的ETag
比较使用强比较算法
,这意味着两个文件被认为是相同的字节到字节。当W/
在前面使用前缀时,这被削弱了ETag
。
有两种常见用例:
- 对于
GET
和HEAD
方法,与Range
头部结合使用,可以保证请求的新范围来自与前一个相同的资源。如果不匹配,则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> 只表示请求资源的实体标签。它们是放置在双引号(像 "675af34563dc-tr34")之间的 ASCII 字符串,可以加前缀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 |
浏览器兼容性
Feature | Chrome | Firefox | Edge | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic Support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
Feature | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
Basic Support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |