开发实战指南
HTTP ETag:缓存再验证与乐观并发
区分 If-None-Match 缓存校验与 If-Match 写保护,检查弱验证器的限制。
再验证已保存的响应
ETag 按服务端规则标识所选表示,客户端可用 If-None-Match 检查已存响应是否仍可使用。
GET 未变化时的 304 不提供新表示正文,客户端应使用已有内容。
GET /document
If-None-Match: "v3"
Unchanged response: 304 Not Modified用 If-Match 保护更新
乐观并发更新携带编辑版本的验证器,不再匹配时服务端可返回 412 拒绝。
只有服务端真正执行前置条件检查,才可防止覆盖并发修改。
PUT /document
If-Match: "v3"
Server now has "v4" → 412 Precondition Failed理解弱验证器
以 W/ 开始的是弱 ETag,可用于语义再验证,但 If-Match 需要强比较。
不能自行去掉 W/ 把弱值冒充强值,应保留服务端完整引号值。
从获授权客户端检查
只在显式运行时向自己控制或获授权的目标发请求,跨域脚本读取 ETag 可能需要 CORS 暴露。
浏览器不让脚本读取与服务端未发送是两种问题,应对照网络响应和客户端可读头。