If-None-Match

If-None-Match HTTP 请求头使请求成为条件请求。对于 GETHEAD 方法,服务器将仅当它没有与给定 ETag 相匹配的 ETag 时,才返回请求的资源,并使用 200 状态。对于其他方法,只有当最终存在的资源的 ETag 与列出的任何值都不匹配时,才会处理该请求。

当条件对于 GETHEAD 方法失败时,服务器必须返回 HTTP 状态码 304(未修改)。对于应用服务器端更改的方法,将使用状态码 412(前提条件失败)。请注意,生成 304 响应的服务器必须生成以下任何一个将出现在对相同请求的 200(OK)响应中的标题字段:Cache-Control、Content-Location、Date、ETag、Expires 和 Vary。

与存储的 ETag 的比较使用的是弱比较算法,这意味着如果内容等效,则两个文件被认为是相同的 - 它们不必在字节上完全相同。例如,在页脚中创建日期不同的两个页面仍将被视为相同。

当与 If-Modified-Since 结合使用时,If-None-Match 优先(如果服务器支持)。

有两个常见的用例

  • 对于 GETHEAD 方法,更新具有关联的 ETag 的缓存实体。
  • 对于其他方法,特别是对于 PUTIf-None-Match* 值一起使用可以用于保存不存在的文件,保证在另一个上传发生之前不会丢失之前 put 的数据;这个问题是 丢失更新问题 的一个变体。
标题类型 请求头
禁止的标题名称

语法

http
If-None-Match: "<etag_value>"
If-None-Match: "<etag_value>", "<etag_value>", …
If-None-Match: *

指令

<etag_value>

唯一地表示请求资源的实体标签。它们是放置在双引号之间的 ASCII 字符串(如 "675af34563dc-tr34"),并且可能以 W/ 为前缀来指示应该使用弱比较算法(对于 If-None-Match 来说这是无用的,因为它只使用该算法)。

*

星号是一个特殊的值,表示任何资源。它们只在上传资源时有用,通常与 PUT 一起使用,以检查之前是否已上传具有相同标识的另一个资源。

示例

http
If-None-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d"

If-None-Match: W/"67ab43", "54ed21", "7892dd"

If-None-Match: *

规范

规范
HTTP 语义
# field.if-none-match

浏览器兼容性

BCD 表格只在浏览器中加载

另请参阅