If-None-Match header

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

HTTP If-None-Match 请求头使请求条件化。服务器只在没有匹配 If-None-Match 头中任何 ETag 的情况下,才会在 GETHEAD 方法中返回所请求的资源,并附带 200 状态。对于其他方法,请求只在最终存在的资源的 ETag 不匹配所列出的任何值时才会被处理。

GET304 Not Modified 状态,以及任何在 200 响应中会发送的以下头字段:Cache-ControlContent-LocationDateETagExpiresVary。对于应用于服务器端更改的方法,当条件失败时,使用 412 Precondition Failed

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

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

在请求中使用 If-None-Match 有两种常见情况:

  • 对于 GETPUTIf-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

浏览器兼容性

另见