If-None-Match

优质
小牛编辑
129浏览
2023-12-01

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 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)