加载中...

ETag(Entity Tag,实体标签)是 HTTP/1.1 定义的响应头,由服务器为资源的特定版本生成一个不透明标识符(通常基于内容哈希、修改时间或版本号),用于缓存验证与并发控制。
浏览器首次获取资源时记下 ETag;再次请求时通过 If-None-Match 头带上该值,服务器比对后若资源未变,返回 304 Not Modified 且不带响应体,客户端继续使用本地副本,从而节省带宽。相较基于时间的 Last-Modified/If-Modified-Since,ETag 精度更高,不受秒级时间粒度和文件时间戳变动的影响。
强 ETag 要求字节级完全一致;弱 ETag 以 W/ 前缀标记,只要求语义等价,适合动态压缩等场景。ETag 还用于乐观并发控制:PUT 请求带 If-Match,版本不符则返回 412,防止「丢失更新」。
多台服务器对同一文件生成的 ETag 若不一致(如包含 inode 信息),会导致集群环境下 304 失效,Nginx、Apache 都有相应的配置调整方案。

登录 后参与讨论
暂无讨论,来发表第一条评论吧