强缓存与协商缓存:让你上网更快的秘密

你有没有发现,有时候打开一个网页特别快,哪怕网络不太稳定?其实这背后有很大一部分功劳要归功于浏览器的缓存机制。尤其是“强缓存”和“协商缓存”,它们就像网页的“记忆系统”,帮你省去重复加载的麻烦。

什么是强缓存?

强缓存就像是浏览器给自己定了一条规则:“这个资源在某个时间前不用再问服务器了”。只要在这个有效期内,浏览器直接从本地拿数据,连网络请求都不发,自然就快。

实现强缓存主要靠两个响应头:ExpiresCache-Control

比如服务器返回:

Cache-Control: max-age=3600

意思是这个资源可以缓存 1 小时。在这 60 分钟里,无论你刷新多少次页面,浏览器都不会向服务器发请求,而是直接使用本地缓存的版本。

如果你打开开发者工具,会看到状态码显示为 200 (from disk cache)200 (from memory cache),这就是强缓存生效的标志。

那协商缓存又是啥?

当强缓存过期了,浏览器不会立刻重新下载整个资源,而是先“问问”服务器:“我手里的版本还行吗?”——这个过程就是协商缓存。

它依赖两个常见的字段:Last-ModifiedIf-None-Match(对应 ETag)。

举个例子,你第一次访问一张图片,服务器返回:

Last-Modified: Wed, 15 Oct 2023 12:00:00 GMT
ETag: "abc123"

等你下次再访问,浏览器就会带上这些信息去问:

If-Modified-Since: Wed, 15 Oct 2023 12:00:00 GMT
If-None-Match: "abc123"

如果服务器发现资源没变,就回个 304 Not Modified,告诉浏览器:“放心用旧的就行”。这样一来,不用下载内容,节省了流量,也加快了加载速度。

实际场景对比

想象一下你常看的一个新闻网站。首页的 CSS 和 JS 文件基本不变,这类资源适合用强缓存,设置较长有效期。而新闻列表是动态更新的,可能每小时都有新内容,这时候就可以配合协商缓存,既保证及时性,又避免频繁全量加载。

再比如你在手机上刷短视频,App 会把封面图、播放页结构缓存起来。即使你退出再进,页面瞬间弹出,这就是强缓存的功劳。等页面显示后,再通过协商缓存确认有没有新评论或点赞数变化。

怎么判断用了哪种缓存?

打开浏览器开发者工具,选中 Network 面板,刷新页面,观察请求的 Size 列:

  • 显示 from disk cachefrom memory cache → 强缓存生效
  • 状态码是 304 → 协商缓存生效
  • 状态码是 200 且有具体大小(如 12KB)→ 从头下载,没走缓存

了解这些,不仅能帮你理解网页为什么快或慢,调试前端问题时也能更快定位是不是缓存惹的祸。