开发实战指南

HTTP ETag:缓存再验证与乐观并发

区分 If-None-Match 缓存校验与 If-Match 写保护,检查弱验证器的限制。

Nav Tools ·

再验证已保存的响应

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 暴露。

浏览器不让脚本读取与服务端未发送是两种问题,应对照网络响应和客户端可读头。

参考资料

← 开发实战指南