怎么打败微信内置浏览器的恐怖缓存

事情的起因

在上周五的一次发版,在我的想象中,应该又是一次平平无奇的发版,我很淡定的在微信聊天框里面点开了链接。

"哦hou,怎么还是上次的版本?运维还没有发版本了?"

"@运维,请问发版结束了吗?"

"已发版",运维很快会了三个字。

我就知道,又是微信浏览器缓存的问题。

解决方案

是的,很快,啪的一下,如果各位不想看分析过程,那么请看解决方案:

步骤1. 修改打包文件,打包后的 css、js 都加上唯一哈希值

这个就根据打包工具来设置就行了,打开 ai 工具,直接问:

"我是 webpack/vue cli/vite 等,怎么打包文件,打包后的 css、js 都加上唯一哈希值"

步骤2. 改 html 的响应头

给html加上响应头:Cache-Control: no-cache, no-store, must-revalidate

响应头说明:浏览器、CDN、代理服务器 都不要缓存这个资源,用户每次访问都去服务器拿最新的。

参考代码:

nginx 复制代码
location ~* \.(html)$ {
    add_header Cache-Control "no-cache, no-store, must-revalidate";
    add_header Pragma "no-cache";
    add_header Expires 0;
}

分析过程

事实上,我之前一直无视这个问题,因为 dev、uat 环境之前已经配了 Cache-Control: no-cache, no-store, must-revalidate,所以没发现。

而且好几次上线都能拿到最新的,没想到第三次的时候,突然来这样子搞,一时不察。

先定位原因,直接上抓包工具,这里我用的是 appStore 的 Stream,去下载,这个好用

为啥没有安卓的,因为安卓抓 https 的包,需要 root 权限,我实在没有安卓手机,也没法推荐了,抱歉

我一抓包,一看,完全没有 js、css 的请求,只有 html,我就知道了,微信缓存。

立刻找同事,让它清除缓存看看,成功!

好了,可以开始拉会议对接这个问题了,叭叭叭跟相关人员讲了一堆,运维说:"啊,没想到微信缓存那么久的?"

最后的一段文字

我从事前端开发的日子里,微信的缓存总是犹如梦魇一般,在每次的项目里都会出现。

"怎么打开异常了?有 bug" "怎么页面还是旧的啊" "打开后弹窗报错了"

"亲,这是微信缓存,你清一下",我哈哈哈的无语了。

而且吊诡的微信浏览器在早些年,就算你用了各种手段,它都是拉了旧的 html,还好新时代好了

现在的话,一般在 解决方案 这两板斧下去,都没问题的。

此致,古德拜

相关推荐
瑞瑞小同学9 小时前
处理echarts x轴内容过多,重叠问题
前端·javascript·echarts
HexCIer9 小时前
面向未来的原子化 CSS:UnoCSS 核心架构分析与 Tailwind CSS 现状
前端·css·vite
程序员黑豆9 小时前
鸿蒙应用开发中的单位详解:px、vp、fp、lpx
前端·harmonyos
像我这样帅的人丶你还10 小时前
MCP + npm:给五年前的老系统接上AI
前端·javascript·agent
南一Nanyi10 小时前
依赖注入和控制反转
前端·设计模式·nestjs
小村儿10 小时前
连载14-实战篇--一个半月,我一个人和 Claude Code 搭出一套数字人工程
前端·后端·ai编程
愚公移码10 小时前
蓝凌EKP18产品:流程虚拟机(PVM)
java·开发语言·前端
promiseThen10 小时前
5 分钟上手 Markdown:标题到表格、代码块与简历实战
前端
web66liang10 小时前
webpack4+vue2项目使用 sass-embedded 导致的 DockerfIle 构建失败的问题
前端
Strayer10 小时前
拓扑管网 3D 可视化大屏demo:科技感(地图 + 拓扑 + 3D 空间)
前端·three.js·数据可视化