ETag 与 Last-Modified:省的不是请求数,是正文流量
两者都用于「问问源站有没有变」。搞清楚它们各自的精度和代价,能在不牺牲新鲜度的前提下砍掉大量回源字节。
6 分钟缓存与命中

要点
验证请求省的是正文而不是往返:命中时返回 304,只有响应头没有正文。对大文件收益明显,对小文件几乎无意义。
验证是怎么发生的
副本过期后,CDN 并不一定要重新下载整个资源。它可以带上上次记录的标识去问源站「还是这个吗」,源站若确认未变就返回 304 Not Modified——不含正文。
# CDN 发出的验证请求
If-None-Match: "a1b2c3d4"
If-Modified-Since: Wed, 15 Jul 2026 08:00:00 GMT
# 源站确认未变
HTTP/1.1 304 Not Modified两者的差别
多源站部署时的坑
如果 ETag 由文件 inode 或时间戳生成,多台源站对同一份文件会给出不同的 ETag。CDN 每次验证都会拿到「变了」的结论,于是反复下载完整正文。多源站部署时要确保 ETag 基于内容哈希生成。
实际能省多少
验证请求仍然要走一次完整的回源往返,延迟省不掉。省下来的是正文字节——一个 5MB 的视频分片,验证命中时只传几百字节响应头。
- 大文件(视频、安装包、字体):收益显著,回源流量能大幅下降;
- 小文件(图标、小 JS):正文本来就小,省下的字节抵不上多一次往返的延迟——不如直接设长 TTL 加内容哈希文件名;
- 真正的最优解是让资源根本不需要验证:内容哈希文件名 + 长 TTL + immutable。
在你的网站验证
边缘核验查看你的资源是否返回了可用的 ETag