关于 浏览器 Cache-Control 不能设置问题。


首先看一次 清空了浏览器缓存 + 强制刷新 的记录


代码是这样的

<!DOCTYPE html>
<html>
    <head>
        <title>test</title>
         
        <meta http-equiv="Cache-Control" content="max-age=60000" />
        
        <link rel="stylesheet" href="mo.css">
        <script type="text/javascript" src="we.js"></script>
        <script type="text/javascript" src="mo.js"></script>
    </head>
    <body>
        <h1 id="reh">login...</h1>
        <p><img src="logo.jpg" /></p>
    </body>
</html>

这个 meta 标签设置无效,明明是设置了max-age=60000的,但为什么发送请求时就变成了
no-cache 了
使用chrom 浏览器
这两个也没勾上


而且发现个奇怪问题是我地址栏回车时是这样的

有没人解释一下什么回事?我要做到的最终目的是缓存资源文件,就是 js ,css ,img直接本地缓存取而不发请求 304 再在本地取,就是chrome 的 200 (form cache);


首先,缓存问题依靠html的meta标签解决是不靠谱的,一般大型网站都依靠nginx server在 http头中对静态资源设置缓存。
而影响缓存的http头有好几个,尽管http 1.1协议之后,从协议本身的规范的角度可以认为 只要有cache-control这个头存在,pragma expires就无效了,但你不能相信所有浏览器所有版本都完全按照标准进行了实现,所以,比较职业的做法是把所有该下发的http头都派发过去,更保险一些。
在你的截图中,我看到response headers里缺少expires字段,并且你虽然cache-control给了个3600(注意这里的单位是second 相当于缓存时间是1小时,考虑到服务器时间与客户端机器的时间有可能存在一些差异,如果真希望缓存的静态资源,不建议给这么小的max-age),然而你设置了pragma:no-cache,这显然是你的apache服务器配置的问题,我估计你的conf文件是从网上随便找了一份,设置缓存时忘记去掉这一行了,pragma建议去掉,当然也可以查一下文档这个头该怎么设置缓存值,设一个长一些的。
另外,我还注意到,你在浏览器中直接以127.0.0.1的ip地址进行访问,依靠chrome内核(准确说叫blink,google基于webkit项目切出的一个分支,目前作为chrome浏览器内核)解析网页的所有浏览器,在这种直接访问ip地址的场景下都会表现出一些诡异的情况,有时是缓存与线上不一样,有时是跨域的CORS策略会与线上不同,所以你再本地做实验 最好绑个host,也不要直接localhost访问。

最后,再科普一个知识,chrome浏览器为了优化页面加载速度,做了非常复杂的缓存和预加载策略,当你点F5(win系统)或command-R(mac系统)刷新浏览器时,通常是穿透缓存的,而当你在地址栏里输入后直接回车时,往往会被缓存cache住。说的再深一点,当你在浏览器地址栏里输入地址时,出现那个下拉提示菜单,如果你选择了菜单中的一个提示选项而不是自己手动敲完整个地址url的话,实际上你还没点回车时 这个http请求就已经发出去了,所以有时会发现 在地址栏里直接选自己之前访问过的页面时 请求速度特别快,实际上是chrome的预加载机制。

缓存是比较复杂的问题,与之相关的任何一个环节设置错误都可能导致结果与预期相左,希望能帮到你。



相关阅读:
transform属性在这种情况下为什么不生效啊?
怎样通过$.ajax跨域请求斗鱼TV API 取得json数据
cef3 cookie分离
标签添加成功了为什么不显示呢?
PHP水印合成中文乱码怎么解?网上教程没用
chrome下disabled的input不能选中和复制, 有解决办法吗
ps切图出现细线
canvas绘制的时钟,出现多余的黑色线条是怎么回事??
关于页面同时异步请求两个js,渲染页面等待如何优化
关于 promise 的问题:请问在这个短小函数里 then 会被执行几遍?
Vue嵌套路由失效?
php中static和abstractor有啥区别?
如何删除选中的cell中对应的行?
js弹窗验证失败
关于STUN协议中属性的一点问题
vuejs 折叠面板的展开收缩动画应该怎么实现?用vue自带的过渡效果还是css3?
关于表单页面提交信息的判断
extjs3.2 panel组件能否添加focus和blur事件
如何将全局变量i变成函数的局部变量?
vue应用嵌在微信里 ,点击微信右上角的分享其中一个页面的链接 ,怎样让用户点开来就是当前页面呢?



快速导航

Copyright © 2016 phpStudy |