直接查看浏览器Network面板中刷新后资源Size显示“from memory cache”或“from disk cache”,且Time降至1–3ms,即可确认静态资源命中浏览器缓存;同时响应头Cache-Control值应为public, max-age=31536000等长效值,而非no-cache或max-age=0。

直接看浏览器开发者工具里的 Network 面板和响应头,就能准确判断静态资源是否命中浏览器缓存。
查关键响应头字段
用 curl -I 或浏览器 Network → Headers 查以下字段:
-
Cache-Control:值为
public, max-age=31536000(1年)或类似长效值才有效;若为no-cache、max-age=0或含private,说明未启用或被后端禁用 -
Expires:应是未来时间(如
Wed, 01 Oct 2027 00:00:00 GMT),不是过去时间或空 -
Last-Modified / ETag:存在即支持协商缓存;第二次请求若返回
304 Not Modified,就是浏览器缓存命中 -
X-Cache-Status(如启用了 Nginx proxy_cache):值为
HIT表示 Nginx 层已缓存并直接返回,不等于浏览器缓存,但能佐证服务端是否配合
比对两次请求的加载表现
在浏览器 Network 面板中刷新同一资源(如 main.css 或 logo.png):
- 首次加载:Size 显示具体字节数(如
124 KB),Time 是完整网络耗时(如142 ms) - 刷新后:Size 变为
from memory cache或from disk cache,Time 降到1–3 ms,即浏览器本地缓存生效 - 注意关闭开发者工具中的 Disable cache 选项;清空缓存后再测;避免隐身模式(部分浏览器默认禁用磁盘缓存)
检查 Nginx 日志中的实际行为
在 log_format 中加入缓存相关变量,例如:
然后观察日志里静态资源请求的记录:
- 大量出现
HIT 0.002→ Nginx 缓存命中,且响应极快 - 持续出现
MISS 0.186或BYPASS→ 请求始终穿透到后端,可能因响应头含Set-Cookie、Cache-Control: no-store,或 location 未匹配到静态路径 - 若
$upstream_cache_status字段为空或为-,说明该请求根本没走 proxy_cache 流程(比如是纯静态文件直出,而非 proxy_pass)
用命令行快速验证缓存一致性
对同一 URL 发起两次 curl 请求,对比响应时间和内容哈希:
curl -s -I https://yoursite.com/style.css | grep -E "Cache-Control|ETag|Last-Modified"-
curl -s https://yoursite.com/style.css | sha256sum(第一次) -
curl -s https://yoursite.com/style.css | sha256sum(第二次)→ 若哈希一致且无网络延迟波动,基本确认内容未重拉


















