微信公众号-->微信html页面缓存问题
问题表现
显示默认的数据
页面中应该是根据api返回数据,渲染api返回的数据,但是页面中一直显示的只是页面中的默认数据
问题猜测
正常情况下,1个客户支付一次,不会出现这个情况,没有缓存的机会,
这种情况多出现在1个客户打开过一个之前版本的页面,页面后期更新过内容,但是之前版本还是存在微信缓存中,
或者是公司内部开发测试人员出现这种情况.
在寻找解决方案的时候,发现很多公司也遇到了这种情况,
问题根本点在于微信的缓存机制太顽固,
跳转-->再跳转-->(最终我采取的方案,)
感觉其中一个回复的想法比较靠谱-->以己之矛,攻己之盾,
既然微信公众号这么喜欢缓存html页面,
那么扔给微信公众号一个空白页面去缓存,
(前提是微信公众号只是缓存入口的html页面,而不是缓存了所有访问过的html页面)
决定空白页面的不变,和要跳转到真实html页面变化.
我也遇到这个蛋疼的问题 safari浏览器没问题,android微信没问题,android系统浏览器没问题ios微信有问题 用了N种办法都解决不了~最后只有把微信删了。
(理论上搞定)可用户不会把为了你的页面把微信删掉是吧?
折中的办法访问的url链接重新指向新的一个url这样就不会出现问题了。
我是订阅号发送链接的!
注意事项
- 如果修改了空白页html中的内容,那只能将空白页html改名,或者清理手机缓存了...
作者:洪隆
链接:https://www.zhihu.com/question/22471239/answer/44974283
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
其它问题
跨域问题
如果html中一些api请求,没有返回数据,可能是跨域问题,
查看api服务器是否将支付服务器设置为可以跨域.
测试记录
1.修改js代码,增加弹出框
第一次修改了html引用的js代码,在js初始化的时候,加入了一个alert(""),然后将js文件替换到测试环境,
打开支付页面,竟然没有执行alert弹出框,
2.修改html页面.为js添加版本号
//原引用
<script src="/Scripts/Test.js"></script>
//修改后
<script src="/Scripts/Test.js?v=20210324"></script>
修改完之后,再次进入页面,
发现js增加的弹出框,已经显示了.
3.增加一个空白html
3.1.增加一个空白html -->{PayConfirmBlankPage.html}
//获取网页url中的相应参数
function getQueryStringBlankPage(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return decodeURI(r[2]);
return null;
}
document.ready(function () {
var id = getQueryStringBlankPage("id");
location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=0'
//将空白页中的参数,传递到实际要去的页面,并且增加一个随机数,
window.location.href = "/Pay/PayConfirm.html?id=" + id + "&v=" + Math.random();
})
3.2.修改实际支付页面引用的js中的代码(alert)
alert("未修改js文件版本号,但是修改了js代码");
3.3.可以看到已经执行新增的js代码(成功弹出执行的内容)
3.4.修改实际支付页面中的html内容(修改了一个按钮中的文本)
3.5.再次打开支付页面,可以看到按钮中的文本已经修改.
如何测试 & 测试微信缓存问题修复标准
如何测试
*.如何知道页面是否已经更改了,(更新了html中的内容,如何才能看出来我已经更新了html内容)
这样我更改了html页面后,我需要知道微信中的html是否也同样更新了,
测试通过标准 -->
只要在测试服务器上修改了实际支付html页面,或者js.
每次进去微信html页面,都可以看出来变化即可(这样也就表明了每次进去微信html页面都是获取的最新资源)
备注:这么是否可以,还需验证,甚至或者还有未考虑到的问题?
微信开放社区摘抄问题
微信公众号页面缓存问题
html页面放到公众号里面,每次都要自己清除微信的缓存才能访问到最新版本,
我每次更新外网页面时都在链接后面加了个版本号还是不行,怎么样才能正真去掉这个缓存呢?
回复(摘选几个回复)
微信公众号的缓存非常恶心,尝试过各种方案都苦不堪言。
现在我们是发了新版本就取公众号里面把菜单的url重新加上随机数。
他缓存的是html文件,所以vue打包的j、scss就算是hash地址也没卵用的。
我到时想到个法子,公众号上的菜单先链接到一个空白页面,
这个空白页面重新跳转到公众号的正式首页地址,并且每次跳转都带上随机参数去刷新页面缓存。
让后端配置不要缓存html文件!有些是默认缓存了html文件,不是说不配置缓存html就不缓存了,有些是自动默认配置上的!要让后端设置强制不缓存html类型文件~!
太难了,nginx不缓存,前端不缓存都搞了,还是不行,还是有漏网之鱼,拜托快快解决吧
前端和JAVA快打起来了,求求快解决把!!!
这个问题没人管了?
手动清理微信缓存以前管用现在清理了还是清理不了页面缓存,加参数都没办法重新加载
这个问题配置nginx解决了,如下:
location /html/ {
root D:/tools/nginx\-1.16.0;
#解决微信缓存页面配置
autoindex on;
add\_header Cache\-Control "no\-store";
expires \-1;
}
改文件名可以临时救急
从2019-08-23 到 2021-3-12。已经19个月、84星期 、587天过去了。。。
修改.[js,html,css]文件版本号
猜测这种情况不好使,如果一个客户已经存在{test.js?v=1}的一个指定版本号的缓存了,
那么只能服务器修改版本号才能清楚这个客户的js缓存,
导致的问题就是,只要一个客户存在缓存就要修改版本号?
这种解决方案应该可以临时救急(只要1个客户反映有缓存,就修改文件版本号),
但是不能彻底解决缓存问题.
修改HTTP响应标头
IIS -->(选中需要修改的)网站 -->HTTP响应标头 -->添加自定义HTTP响应头
名称(N):cache-control
值(V):no-cache
add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
以下为原答案这个问题首先要搞清楚微信的缓存机制。据我观察,开发中频繁更新html文件,并不会缓存。
猜测和服务器返回的Last-Modified有关。并且抓包发现,缓存时,微信没有向服务器请求html文件,改变服务器过期时间并没有用。
touch -m -t 11151101 abcd.html修改文件的修改时间到一个比较旧的时间点,访问网页立即触发了缓存。
这就比较简单了,Last-Modified永远是最新的不就解决了。
立即动手,改变一下nginx设置,比如我们用Vue框架,
入口页/mall/index.html.
location = /mall/index.html {
add_header Last-Modified $date_gmt;
}
实测有效,希望对大家有帮助
作者:lst
链接:https://www.zhihu.com/question/22471239/answer/532057671
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
修改html页面配置
给你的网页header加入强制代码
作者:snowboy
链接:https://www.zhihu.com/question/22471239/answer/73510993
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
跳转-->再跳转-->(最终我采取的方案)
感觉其中一个回复的想法比较靠谱-->以己之矛,攻己之盾,
既然微信公众号这么喜欢缓存html页面,
那么扔给微信公众号一个空白页面去缓存,
(前提是微信公众号只是缓存入口的html页面,而不是缓存了所有访问过的html页面)
决定空白页面的不变,和要跳转到真实html页面变化.
我也遇到这个蛋疼的问题 safari浏览器没问题,android微信没问题,android系统浏览器没问题ios微信有问题 用了N种办法都解决不了~最后只有把微信删了。
(理论上搞定)可用户不会把为了你的页面把微信删掉是吧?
折中的办法访问的url链接重新指向新的一个url这样就不会出现问题了。
我是订阅号发送链接的!
注意事项
- 如果修改了空白页html中的内容,那只能将空白页html改名,或者清理手机缓存了...
作者:洪隆
链接:https://www.zhihu.com/question/22471239/answer/44974283
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
摘抄文档
微信开放社区
CSN.微信h5页面缓存
Segmentfault.微信页面入口文件被缓存解决方案
V2ex.微信内浏览器缓存网页有什么办法解决啊?
V2ex.微信中打开的网页怎么刷新缓存?