一个由微信浏览器缓存引发的问题

项目背景:企业微信,网页应用;开发工具为HBuilder,使用H5打包。
问题背景:曾经让兼职开发的一个项目被同事Z接手,临时帮忙做点小功能,更新上去,好应对新年。
问题现象:在本地测试没问题后同事就把打包好的文件替换了上去,结果陆续收到了很多人反馈白屏,有的刷新一遍就好了,有的无论怎么刷新始终是白屏。

中间折腾了很久也没有处理完这个问题,还害得Z跑到网吧(没电脑)去处理,在此表示感谢。期间Z忘了把提交到gitlab上,我穿着睡衣去的公司帮忙提交。
折腾了大概一两天,无果。无奈替换回原来的版本,中间断断续续还是有白屏现象。

年后Z可能比较忙(惭愧,被我年前折腾惨了),对于我的消息差不多基本属于看不到状态。没办法,还是得安排其他人来处理这个问题,于是找到了另一个同事L帮忙。可惜L那边事情更多(在此同样表示感谢),但我实在找不到合适的人了。中间L更新了一个功能,传上去之后也有很多人反应白屏,我想,这个问题肯定是没修复。于是请求L找到原因并解决掉,不过L也没有什么好办法,无奈,我只能试着跟她一起来找原因。我看了一下打包后的文件,他们每个人的chunk-vendors.xxxx.js文件不一样,而index.html里只引了2个js。在盲目测试的时候发现Google浏览器在上传后也会白屏,一刷新就好了,在刷新之前我看到好多js是404状态,同时发现请求的chunk-vendors.xxxx.js是上一个人的。于是认为这是index.html文件缓存问题。接下来就开始处理微信缓存的问题了,踩坑开始~

尝试在index.htmlhead中加了以下代码:

1
2
3
4
<meta http-equiv="Expires" content="0">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Cache" content="no-cache">

结果后来才发现并不管用。
还好同时在nginx配置文件中加入了以下代码:

1
2
3
4
# 禁止缓存html
location = /front/index.html {
add_header Cache-Control "no-cache, no-store";
}

这段代码在微信开发者工具中测试是管用的。

后来在网上搜到,以下代码也是管用的,暂未尝试,大家可以试试:

1
2
3
4
location ~ .*\.(?:htm|html)$ {
expires -1;
add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate";
}

这个大坑真的让人难以忘怀,终究还是很多技术掌握不到位导致的。哦,对了,我和Z、L都是后端。