火次果
火次果

暂无菜单项

首页/文章/技术文章/web前端/HTML5/
打开 MD 链接

CSS 改了不生效:缓存这关绕不过去

发布于 3天前
5

样式改了,本地验证没问题,发到线上用户截图过来还是旧样子 💾。这种反馈接过不止一次,根子都在同一个地方:浏览器手里的缓存还没过期。

机械硬盘特写
缓存加快访问,也会把旧版本拦在用户面前

先想清楚缓存在哪几层

浏览器本地一份,中间代理一份,CDN 边缘节点还有一份。只盯着浏览器硬刷新,治标不治本,CDN 那层照样把旧文件喂给下一个用户 ⚠️。

治标方案:版本参数

<link rel="stylesheet" href="style.css?v=20261002">

改了参数,浏览器当成新资源重新请求。简单有效,但有两个软肋:部分中间代理会忽略查询串做缓存键,手动改版本号也总有忘的时候。

治本方案:文件名指纹

<link rel="stylesheet" href="style.a1b2c3.css">

构建工具按文件内容算 hash,内容变名字必变 ✅。静态资源可以放心配上一年长缓存,更新靠改名天然破缓存,这是最干净的做法。

配套的三件事

  • HTML 引用要跟着指纹走,交给构建工具自动注入,手工维护必出错。
  • HTML 本身用短缓存或不缓存,入口拿不到新版本,资源指纹再准也没用。
  • CDN 发布流程里加刷新步骤,确认边缘节点回源取到新文件 📦。

结论:HTML 短缓存指方向,静态资源长缓存加指纹,两层各管各的,缓存问题基本绝迹。

常见问题(FAQ)

为什么改了 CSS 用户看到的还是旧样式?
浏览器或 CDN 缓存中的旧文件还没过期,用户拿到的仍是旧版本,与代码是否正确无关。
?v= 参数和文件指纹有什么区别?
查询串版本号可能被部分代理忽略,仍需手动维护。文件指纹按内容生成,改名即破缓存,自动化程度高,是最彻底的方案。
文件指纹怎么生成?
构建工具在打包时按文件内容计算 hash 值,嵌入文件名。内容变化则 hash 变化,引用同步更新。
HTML 文件本身的缓存怎么处理?
HTML 应使用短缓存或不缓存。HTML 是入口,拿不到新 HTML,新的资源指纹就无法被发现。
CDN 层面需要做什么配合?
配置合理的回源与缓存键规则,发布流程中加入缓存刷新步骤,确保边缘节点及时取到新文件。
CDN缓存link标签文件指纹版本号缓存破击
支持作者
如果这篇内容对你有帮助,可以请作者喝杯咖啡
0 点赞
0 收藏
分享
0 讨论
反馈
0 / 600
细中粗
0 讨论
热门最新
总结
暂无总结
嗨,下午好!
所有的成功,都源自一个勇敢的开始
创作
社区
购物
会员
近期热门

暂无数据

火次果
火次果
首页
资迅中心
小店
AI导航
社区
所有的成功,都源自一个勇敢的开始
不辜负每一个勇敢的开始
关于FAQ协议
火次果 © 2026鲁ICP备2025164830号-1