---
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/弱验证/范围请求,与正文一致。

发表评论 取消回复