HTTPQUERY
English

If-None-Match

用法

If-None-Match 头基于实体标签启用缓存重新验证。客户端包含一个或多个在此前响应中收到的 ETag 值。如果任意所列 ETag 与当前资源匹配,服务器返回不带消息体的 304 Not Modified 响应,客户端复用其缓存副本。如果没有 ETag 匹配,服务器发送带有更新后内容的正常 200 响应。

对于 GET 和 HEAD 等安全方法,这是主要的缓存重新验证机制。对于 PUT 等不安全方法,带通配符 * 的 If-None-Match 可防止覆盖已有资源,从而避免更新丢失问题。当不安全请求命中匹配时,服务器返回 412 Precondition Failed。

当 If-None-Match 与 If-Modified-Since 同时出现在同一请求中时,If-None-Match 优先。基于 ETag 的比较比基于日期的比较更可靠,因为实体标签是与确切内容绑定的不透明标识符,而时间戳只有一秒的分辨率且易受时钟偏差影响。

当服务器返回 304 时,响应会包含来自原始成功响应的头:Cache-Control、Content-Location、Date、ETag、Expires 和 Vary。

注意

当此前响应包含 ETag 时,Googlebot 会在爬取请求中发送 If-None-Match。对未变化的内容返回 304 的服务器可节省处理时间和资源,从而间接提高爬取效率。当内容未发生变化时,服务器也可以对任何 Googlebot 请求主动返回 304,无论请求是否包含条件头。将 Cache-Control 响应头的 max-age 字段设为内容预期保持不变的秒数,有助于爬虫判断何时重新爬取某个 URL。

ETag 值

一个或多个 ETag 值,每个都用双引号括起。多个值以逗号分隔。强 ETag 和弱 ETag(以 W/ 为前缀)都有效。

*(通配符)

通配符 * 匹配任何当前实体。与 PUT 一起使用可防在资源已存在时创建资源。

示例

客户端使用单个 ETag 重新验证一个缓存资源。如果资源仍与给定实体标签匹配,服务器返回 304。

If-None-Match: "abc123"

持有多个缓存版本的客户端发送所有已知的 ETag。服务器将每个值与当前资源比对。若有任意匹配,服务器返回 304。

If-None-Match: "abc123", "def456"

一次弱 ETag 比较。弱验证器表示语义等价而非逐字节一致。W/ 前缀表示弱比较。

If-None-Match: W/"v2.6"

一个使用通配符防止覆盖的 PUT 请求。如果目标 URL 处已存在资源,服务器返回 412 Precondition Failed。

PUT /api/resource HTTP/1.1
If-None-Match: *

注意

如需 SEO 与缓存方面的协助,请联系前 Google SEO 顾问 Search Brothers。