浏览器是怎么记住网页的
你有没有发现,有时候打开一个常看的新闻网站,加载特别快?哪怕网络不怎么好,页面也能一下蹦出来。这背后,其实是 HTTP 缓存机制在悄悄干活。
简单说,HTTP 缓存就是让浏览器“记下”之前下载过的资源,比如图片、CSS、JS 文件,下次访问时不用重新下载,直接用本地存的那份,省时间也省流量。
缓存从哪开始
当你第一次访问某个网页,浏览器会向服务器发请求。服务器返回页面内容的同时,也会带上一些关于缓存的“指示”,告诉浏览器:这个文件能缓存多久,要不要验证,能不能用旧的。
这些信息主要通过响应头传递,最常见的就是 Cache-Control 和 Expires。
HTTP/1.1 200 OK\nContent-Type: text/html\nCache-Control: max-age=3600\nExpires: Wed, 04 Dec 2024 12:00:00 GMT上面这个例子中,max-age=3600 表示这个资源可以缓存 1 小时,在这期间浏览器可以直接用本地副本,不用再问服务器。
缓存过期了怎么办
时间一到,缓存失效,浏览器不能直接用了。但它也不会立刻重新下载完整文件,而是先问问服务器:我手里的版本还有效吗?
这个过程叫“协商缓存”。浏览器会带上上次响应给它的标识,比如 Last-Modified 或 ETag。
If-Modified-Since: Wed, 04 Dec 2024 10:00:00 GMT\nIf-None-Match: "abc123"服务器收到后,对比当前文件的最后修改时间和 ETag。如果没变,就回一个 304 状态码,意思是“没更新,你继续用旧的”。这样一来,连数据都不用传,速度飞快。
强制刷新和隐私模式
有时候你会按 Ctrl+F5 强制刷新页面,这时候浏览器会忽略本地缓存,直接向服务器要最新资源。相当于跳过了所有缓存判断流程。
同样,你在无痕窗口打开网站,很多资源默认不会走缓存,这也是为什么无痕模式有时看起来更慢一点。
实际场景中的表现
比如你每天上下班路上刷同一个天气 App,它的图标和界面样式基本不变。这些静态资源都被缓存了,每天打开时只需要拉取最新的温度数据,其他部分直接用本地的,体验自然流畅。
但如果某天开发团队更新了界面,改了 CSS,他们通常会给新文件换个名字,比如从 style.css 变成 style-v2.css。这样浏览器会当成全新资源下载,实现“强制更新”。
HTTP 缓存不是万能的,也不是永远生效。它是一套规则和协作机制,让网络更高效,也让用户少等几秒。而这几秒积累起来,就是整个互联网的流畅感。