打算再html中通过meta的Cache-Control:no-cache/ no-store来禁止页面的缓存,可是无论如何都不起作用,刷新页面时css/js脚本一直都是from cache,请问这是什么原因,改如何解决,难道是一定要通过服务器才能控制页面的缓存吗?
网上查了很多资料,大都是一篇文章copy来copy去没有一点建设性的意义,还请大神给指点下:
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<!-- <meta http-equiv="Cache-Control" content="max-age=0" /> -->
上面是页面meta信息的设置,下面是反复刷新页面时,资源的请求情况,依然是直接获取的cache:
求问什么原因?如何解决?
这张图看着更奇怪,下面请求头的意思应该是已经收到页面meta声明的缓存策略了no-cache,但是整个请求结果还是from memorey cache....
你要想做什么, html页面的缓存, 比如你访问index.html这个页面, 在该页面的meta中加入你之前加入的东西是可以避免浏览器缓存的,
但是在html里面link或者script引入的css和js, 要避免缓存,第一个可以再后面加入一个随机参数避免缓存, 第二个可以通过服务器apache或者nginx的设置来避免缓存
<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">
有些浏览器还是缓存了文件,那么就必须给每个文件加个后缀时间戳,告诉浏览器这个是新文件,必须重新加载,浏览器就会从新到服务器端读取数据文件显示出来。
catch-control是客户端单向的指令,服务器端可能没有同样的指令
memory cache缓存就是这样的,从这里获取内容时,就是会忽略些头部配置,比如no-cache或者max-age=0之类的。
如果想确保一定是新的,可以在服务端响应设置头部cache-control:no-store
如果想保证缓存控制的有效性,只能够通过网络服务器配置缓存控制了,因为meta标签的解析实现不是所有浏览器的必然支持的。你给了某个标签,也只是建议浏览器应该怎么做而已,具体的浏览器对页面缓存的设置可能会让表现有异常