博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于浏览器缓存问题
阅读量:4569 次
发布时间:2019-06-08

本文共 1342 字,大约阅读时间需要 4 分钟。

 

之前遇到一个问题,就是首页的index.html文件 里面关联的css和js文件都是加hash值的,然后每次更新发版 index.html里面的js和css文件的hash肯定会更新 ,但是很不幸 每次用户打开的index.html文件还是上次的 html文件,也就是说因为index.html文件没有更新 导致请求的js和css还是上个版本的文件

我已经在html的head里面设置了cache-control: no-control,但是index.html文件还是没有更新,看了一下浏览器发起的request 的cache-control是no-cache,这代表的是在使用本地缓存之前会先到服务器端判断一下,这个时候如果服务器端没有开启etag机制,那就使用 Last-Modified 但是有时候 Last-Modified并不能很精确的反应修改时间 有时候可能返回的还是上次的文件,所以应该是服务器端没有开启etag机制,导致我的html文件虽然设置了不缓存,但是chrome还是以no-cache方式去到服务器端验证。。。

 

request和respones中 cache-control的no-cache的不同:

request:这个大家都知道了

response中:这个理论上是告诉客户端不要缓存,单据客户端浏览器是不是这样实现就不得而知了

 

如果responese中返回中明确表明缓存该文件 也就是设置max-age,那在request的时候 cache-control设置了noche,这个时候是什么样的,这个是客户端优先 所以还是会去服务器端请求一次

 

如果在responese中设置cache-control为no-store,那应该也是表示不缓存该文件,但是浏览器应该还是会缓存这个文件,在response中设置cache-control并不会同时应用到request中的cache-control中,

1:我之前一直理解错了,我认为只要在index.html的head中设置cache-control:no-store,下次浏览器请求的也会是cache-nostore 两者之间没有直接关系,response中的cache只是控制浏览器在发起请求前的行为

2:我理解错了第二个问题就是request的cache-control与response中的cache-control职责是不一样的,request中的cache-control意思是告诉代理服务器或者服务器我想要什么样的资源,而response中的cache-control是告诉浏览器 你需要采取什么策略缓存我的资源

3:我之前一直在纠结服务器端缓存是针对每一个客户端都缓存一套还是针对所有客户端,后来一想,如果是针对每一个客户端都去缓存一个文件,那内存迟早要充爆,所以服务器端缓存最好是针对所有客户端,意味着我们应该缓存那些通用的界面 与用户行为无关的界面

4:今天同时说request设置cache-control应该是可以覆盖response设置的cache-control策略 不知可否

 

 

 

参考:

 

转载于:https://www.cnblogs.com/mrzhu/p/11261025.html

你可能感兴趣的文章
C# winform端 通过HttpWebRequest进行post和get请求,数据格式为json,后台java端接收,其中有关传输特殊字符(\t,\r,',\n,n)等处理...
查看>>
4069: [Apio2015]巴厘岛的雕塑
查看>>
yii2常用路径获取
查看>>
18 | 眼前一亮:带你玩转GUI自动化的测试报告
查看>>
Gitlab修改默认端口
查看>>
功能规格说明书
查看>>
JavaScipt30(第七个案例)(主要知识点:数组some,every,findIndex方法)
查看>>
Android 采用HttpClient提交数据到服务器
查看>>
EL表达式概述
查看>>
word中批量修改图片大小
查看>>
第四次scrum冲刺
查看>>
Ext4 中 日期和时间的控件
查看>>
最长子序列问题
查看>>
python中一些有用的函数------持续更新中
查看>>
第三次作业—张淑华
查看>>
python 实现字符串的切片功能
查看>>
Centos 文件权限修改
查看>>
使用Amazon Simple Queues Service (SQS)实现与AutoCAD远程交互
查看>>
oracle 游标
查看>>
滚动条滚动到最底部的方法总结
查看>>