---

title: ETag 强弱校验与 304:内容哈希、范围请求与陷阱

keywords:

  • ETag
  • If-None-Match
  • 304
  • 弱验证器
  • 范围请求
  • 哈希

description: 解释强/弱 ETag 的差异、与 304/If-None-Match 的协作、范围请求的影响,以及错误实现导致的更新丢失陷阱。

categories:

  • 文章资讯
  • 编程技术

---

概述

ETag 标识资源的特定版本,配合 If-None-Match 可避免重复传输与资源“空中碰撞”。强/弱 ETag 的选择影响缓存与范围请求行为,错误实现可能造成更新丢失。

强/弱 ETag 与比较

  • 强 ETag:字节级相等;支持范围请求缓存重用,更精确但生成成本高。
  • 弱 ETag(前缀 W/):语义相等但字节不完全一致;不支持范围请求缓存重用,易生成但比较不严格[参考1,2]。

304 与条件请求

  • 客户端发送 If-None-Match 携带缓存的 ETag;服务器比较当前版本与之匹配则返回 304 Not Modified(无主体),表明缓存可用(fresh)[参考1,2,4]。

实践与陷阱

  • 建议为压缩前的实体生成内容哈希或版本号为强 ETag,确保内容编码感知(避免 gzip/br 影响比较)[参考3]。
  • 错误实现未更新 ETag 将导致客户端拿到错误的 304 而不刷新(实际案例讨论)[参考3]。

参考与验证

  • [参考1]MDN 中文:ETag 概念与强/弱验证器、条件请求流程:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Reference/Headers/ETag
  • [参考2]MDN 英文:ETag 说明与弱验证器限制(范围请求):https://mdn.org.cn/en-US/docs/Web/HTTP/Headers/ETag
  • [参考3]维基:ETag 与内容编码感知、错误实现示例与 304 陷阱:https://en.wikipedia.org/wiki/HTTP_ETag
  • [参考4]MDN 英文:ETag 条目与 304 条件请求交互说明:https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/ETag

关键词校验

关键词覆盖 ETag/304/弱验证/范围请求,与正文一致。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部