If-None-Match

If-None-Match

If-None-Match HTTP 请求报头使得所述请求为条件。对于GETHEAD方法,200只有服务器没有ETag与给定资源匹配的情况下,服务器才会返回具有状态的请求资源。对于其他方法,仅当最终现有资源ETag不符合任何列出的值时才会处理该请求。

当条件GETHEAD方法失败时,服务器必须返回 HTTP 状态码304(未修改)。对于应用服务器端更改的方法,将使用状态码412( Precondition Failed )。请注意,生成304响应的服务器必须生成以下头域中的任何一个头域,这些域头域应该发送到同一个请求的200(OK)响应中:Cache-Control,Content-Location,Date,ETag,Expires 和 Vary。

与存储的比较ETag使用弱比较算法,这意味着不仅两个文件是相同的字节到字节,而且如果内容是等同的,则认为两个文件是相同的。例如,只有页脚生成日期不同的两页才会被视为相同。

当与其结合使用时If-Modified-Since,它具有优先权(如果服务器支持它)。

有两种常见用例:

  • 对于GETHEAD方法,更新具有关联的缓存实体ETag

  • 对于其他方法,特别是对PUTIf-None-Match与所使用的*值可以用来保存不知道存在的文件,保证另一个上载并没有发生之前,失去了以前放的数据; 此问题是丢失更新问题的变体。

Header typeRequest header
Forbidden header nameno

语法

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: *

规范

SpecificationTitle
RFC 7232, section 3.2: If-None-MatchHypertext Transfer Protocol (HTTP/1.1): Conditional Requests

浏览器兼容性

FeatureChromeFirefoxEdgeInternet ExplorerOperaSafari
Basic Support(Yes)(Yes)(Yes)(Yes)(Yes)(Yes)

FeatureAndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Basic Support(Yes)(Yes)(Yes)(Yes)(Yes)(Yes)(Yes)