含义
客户端已有的缓存副本仍然有效,因此服务器不发送响应体。它是对带 If-None-Match 或 If-Modified-Since 的条件请求的回应。
常见原因
- If-None-Match 中的 ETag 与当前版本一致
- 资源自 If-Modified-Since 以来没有变化
- 浏览器在重新验证缓存的静态资源
解决方法
客户端或访问者
使用缓存的内容。如果内容看起来过时,可能是验证器有问题;强制刷新或检查 ETag 的生成方式。
网站或 API 的维护者
生成稳定的 ETag(负载均衡后的各台服务器要一致),并发送与 200 相同的缓存头。
响应示例
HTTP/1.1
HTTP/1.1 304 Not Modified
Date: Tue, 07 Oct 2025 09:30:00 GMT
Server: nginx
ETag: "33a64df5"
Cache-Control: max-age=3600 规范
常见问题
› 304 是错误吗?
不是。它告诉客户端缓存仍是最新的,从而节省带宽。
› 为什么部署后用户看到的还是旧文件?
缓存头允许使用旧副本。静态资源使用带指纹的文件名,HTML 使用较短的 max-age 并配合验证。