一次微信网页缓存问题分析与解决

in 工作记录 with 0 comment

起因

突然有零星的部分微信用户反馈,微信扫码支付白屏经过测试后发现服务正常。

开始排查网关问题,之前用百度云CDN也出现过这种情况,之后切换到了阿里云CDN, 一直都挺稳定的。向阿里云提交了工单,很快得到了反馈,CDN无异常。

查看了阿里云CDN监控:

发现404请求在9月16日凌晨后明显变多。

image.png

想起来约两日前,前端进行了一次升级,当时测试一切正常.. 也是凭借着经验怀疑和微信的缓存有关。

让一位访问失败的用户 协助进入了:
http://debugx5.qq.com/
清理了手机微信网页的本地缓存

image.png

再次扫码支付后用户访问成功。

分析白屏原因,应该是用户访问的index.html并不是最新的, 而是微信缓存的旧版的index.html 但是本地的JS缓存过期了,加载旧版JS的时候404了。

赶紧吧旧版的JS也加入到了服务器上。

利用CDN监控查看最近几小时的404请求变化。

image.png

明显下降,问题暂时解决。

谈谈微信网页的缓存策略。

微信会缓存 HTML CSS JS 图片文件在用户的本地! 而且不会及时的更新。缓存消失时间是不确定的。

可以通过携带参数的形式,携带参数发生变化微信就会放弃本地缓存加载新的文件。
如:

http://.com/test.html?v=5
http://
.com/test.js?v=5

为了彻底解决这个问题,同时保证CDN的效果,需要加入版本号机制,
.html?v=5 .js?v=5 这样的形式加载JS和HTML页面, 通过刷新版本号的方式,
让微信及时缓存最新的文件。