If-None-Match
If-None-Match
If-None-Match
HTTP 请求报头使得所述请求为条件。对于GET
和HEAD
方法,200
只有服务器没有ETag
与给定资源匹配的情况下,服务器才会返回具有状态的请求资源。对于其他方法,仅当最终现有资源ETag
不符合任何列出的值时才会处理该请求。
当条件GET
和HEAD
方法失败时,服务器必须返回 HTTP 状态码304(未修改)。对于应用服务器端更改的方法,将使用状态码412( Precondition Failed )。请注意,生成304响应的服务器必须生成以下头域中的任何一个头域,这些域头域应该发送到同一个请求的200(OK)响应中:Cache-Control,Content-Location,Date,ETag,Expires 和 Vary。
与存储的比较ETag
使用弱比较算法
,这意味着不仅两个文件是相同的字节到字节,而且如果内容是等同的,则认为两个文件是相同的。例如,只有页脚生成日期不同的两页才会被视为相同。
当与其结合使用时If-Modified-Since
,它具有优先权(如果服务器支持它)。
有两种常见用例:
- 对于
GET
和HEAD
方法,更新具有关联的缓存实体ETag
。
- 对于其他方法,特别是对
PUT
,If-None-Match
与所使用的*
值可以用来保存不知道存在的文件,保证另一个上载并没有发生之前,失去了以前放的数据; 此问题是丢失更新问题的变体。
Header type | Request header |
---|---|
Forbidden header name | no |
语法
If-None-Match: <etag_value>
If-None-Match: <etag_value>, <etag_value>, …
If-None-Match: *
指令
<etag_value> 唯一表示请求资源的实体标签。它们是放置在双引号(像 "675af34563dc-tr34")之间的一串 ASCII 字符,可以加前缀W/以表示应该使用弱比较算法(这是无用的,If-None-Match因为它只使用该算法)。*星号是表示任何资源的特殊值。它们只有在上传资源时才有用,通常PUT用于检查具有该标识的另一资源是否已经上传过。
例子
If-None-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d"
If-None-Match: W/"67ab43", "54ed21", "7892dd"
If-None-Match: *
规范
Specification | Title |
---|---|
RFC 7232, section 3.2: If-None-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) |