在开发中经常有需求需要禁止HTML的缓存,如网上所说在head标签里加入如下代码:
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">

但是实际使用中却发现即使这样设置了,却还是在首次加载时仍然是旧的页面,再次刷新才能更新到最新的。这样往往就达不想要的效果。请问有没有真正彻底的方法呢?

// 配合 mate禁用 缓存标签,实现禁用浏览器缓存(实现原理,自动刷新)
// <meta HTTP-EQUIV="pragma" CONTENT="no-cache">
// <meta HTTP-EQUIV="Cache-Control" CONTENT="no-store, must-revalidate">
// <meta HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
// <meta HTTP-EQUIV="expires" CONTENT="0">
if(!window.name){
var str = Math.random().toString(36).substr(2);//随机字符串
window.location.href += '?S='+ str;//兼容微信浏览器刷新
window.name = 'isreload';
}

原文链接:https://www.zhihu.com/question/27565755/answer/272178665
来源:知乎


另一种解释:


彻底禁止缓存,这个需求是错误的。缓存是浏览器的功能特性,又不是 Bug。

通常的做法是给静态资源加入可以代表版本号的文件名,如 main.20151107.css,或者使用 Gulp 之类的 md5 插件来根据文件内容生成唯一的文件名。
浏览器发现文件不同了,自然会重新加载。


作者:learnshare
链接:https://www.zhihu.com/question/27565755/answer/71171663



版权声明:若无特殊注明,本文皆为( MonchhiYang )原创,转载请保留文章出处。