← 返回文章列表
浏览器与网络·1417 次阅读

强缓存与协商缓存:二次访问为什么飞快

强缓存与协商缓存:二次访问为什么飞快

第一次访问网站要下载所有资源,第二次却秒开——缓存是性能优化里性价比最高的手段。浏览器缓存分两级。

强缓存:不请求,直接用本地副本

响应头通过 Cache-Control 声明有效期:

Cache-Control: max-age=31536000, immutable

有效期内浏览器连请求都不发,状态码显示 200 (from disk/memory cache)。常用指令:

  • max-age:有效期秒数
  • no-cache:不是不缓存!是每次用之前必须向服务器确认
  • no-store:真正的不缓存,完全不存
  • public / private:是否允许代理 CDN 缓存

Expires 是老版本的绝对时间,有时钟不一致问题,Cache-Control 优先级更高。

协商缓存:问一句"还能用吗"

强缓存过期后,浏览器带上验证字段问服务器:

  • 文件没变 → 304 Not Modified,没有响应体,浏览器继续用本地副本
  • 文件变了 → 200,返回新内容

两组验证字段(服务器返回 / 浏览器下次带回):

服务器返回 请求带回 对比维度
Last-Modified If-Modified-Since 文件修改时间(秒级,可能"内容没变时间变了")
ETag If-None-Match 内容指纹哈希(更精确,优先级更高)

实战配置策略

HTML:no-cache(每次确认,保证能拿到最新入口)
JS/CSS/图片(带 hash 指纹):max-age=31536000, immutable

构建工具产出的文件名都带内容 hash(如 app.a8f3c2.js),内容变文件名才变,所以可以放心缓存一年。这就是"HTML 不缓存、静态资源永久缓存"的经典搭配。

看到这里了?如果这篇文章帮到过你

请我喝瓶可乐就好 🥤

收款码

评论0 条

还没有评论,来抢沙发~

发表评论

评论需审核后显示

© 2026 许冬博客 · 专注 JS 技术分享

·RSS 订阅·Powered by Nuxt 4