← 返回内容列表
基础原理

浏览器缓存为什么有时不更新

缓存能提升速度,但配置不当会让用户继续使用旧资源。关键是区分 HTML 和带哈希静态文件的策略。

先用白话理解

这篇内容在讲什么?

浏览器会保存访问过的文件,下次直接使用,所以有时上线新版本仍会看到旧内容。

问题

发布新版本后,部分用户仍看到旧脚本,怎么解决?

HTML 和静态资源使用相同长期缓存,或文件名没有随内容变化。

解决方案
  1. 资源名加入内容哈希
  2. 静态文件长期缓存
  3. HTML 使用协商缓存
  4. 检查 CDN 刷新
缓存响应头示例代码
# 带哈希静态资源
Cache-Control: public, max-age=31536000, immutable

# HTML
Cache-Control: no-cache
01

强缓存直接使用本地文件

Cache-Control 可以让浏览器在有效期内不请求服务器,适合文件名带内容哈希的 JS、样式和图片。

02

协商缓存会询问服务器

ETag 和 Last-Modified 让浏览器确认文件是否变化,未变化时返回 304。

03

HTML 不应长期锁死

HTML 通常需要较短缓存或协商缓存,因为它负责引用最新的带哈希资源。

  • 静态资源长期缓存
  • 文件名随内容变化
  • HTML 保持可更新

结语

判断最终要回到真实体验

技术方案没有脱离场景的标准答案。把用户任务、业务边界、开发成本和长期维护放在一起评估,才有可能做出稳定、清晰且经得起变化的页面。

照着做的步骤

  1. 区分 HTML 和静态资源
  2. 静态文件使用内容哈希
  3. HTML 使用短缓存或协商缓存
  4. 发布后检查响应头

容易踩的坑

  • 所有文件使用同一缓存时间
  • 文件变化但名称不变
  • 只清自己浏览器缓存验证

术语不用怕

  • Cache-Control:缓存规则响应头
  • ETag:文件版本标识
  • 304:文件未变化的响应