浏览器缓存问题
最近一直思考一个问题。
http缓存问题。
很多都是使用meta设置expires 、Cache-Control这些字段,而然后再http相应报文头里可以看到所设置值。
但还是解决不了不缓存的问题,因为他们的主要作用还是再强缓存与协商缓存里。
资料:彻底理解浏览器缓存机制
而对不缓存的设置还不是很友好,可以说很不容易。
所以一些还是从请求url里寻找,比如加版本号什么的,只要让链接认为是新链接目标就达到了。
所以现在很多都是加版本号什么的。
而url就hash,这是无法实现的,因为hash在浏览器链接认为是一个锚点,定位当前页所在位置,不会上送,所以对链接没有变化,
那么链接不能识别为新链接。
history.replaceState(null, "page 2", window.location.href+"?v=01");
window.location.href = "h1.html";
history.replaceState方法只会替换当前链接到历史记录里,不会刷新的。
但后退到这里就会刷新了。
不过IOS或别的一些浏览器会有缓存优化,不会刷新历史记录的链接,那么可以使用onpageshow事件判断是否缓存手动刷新,只是可能会有闪动效果不太友好,
这里可以使用一些遮罩之类缓和一下。
window.addEventListener('pageshow', function(event) {
if (event.persisted) location.reload(); //如果检测到页面是从“往返缓存”中读取的,刷新页面
});