---

title: ETag 与 If-None-Match:条件请求与缓存一致性

keywords:

  • ETag
  • If-None-Match
  • 304 Not Modified
  • 条件请求
  • 缓存治理

description: 使用 ETag/If-None-Match 配合条件请求实现缓存一致性与带宽节省,示例覆盖服务端生成与客户端请求行为。

categories:

  • 应用软件
  • 聊天工具

---

概述

ETag 作为资源标识符用于条件请求。客户端携带 If-None-Match 与 ETag,服务器匹配后返回 304 Not Modified,避免重复传输。

用法/示例

HTTP/1.1 200 OK
ETag: "686897696a7c876b7e"
GET /asset.css HTTP/1.1
If-None-Match: "686897696a7c876b7e"
// Node/Express 示例
app.get('/asset.css', (req, res) => {
  const etag = computeHash(content)
  if (req.headers['if-none-match'] === etag) res.status(304).end()
  else { res.set('ETag', etag); res.type('text/css').send(content) }
})

工程建议

  • 使用强/弱验证器(W/)区分字节级与语义级变更;与缓存头协同治理。
  • 确保跨节点一致的 ETag 生成,避免负载均衡导致失配。
  • 对压缩与变体(Vary)处理进行明确配置,避免错误复用。

参考与验证

  • MDN:ETag — https://developer.mozilla.org/docs/Web/HTTP/Headers/ETag
  • MDN:If-None-Match — https://developer.mozilla.org/docs/Web/HTTP/Headers/If-None-Match

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部