一,什么是http缓存

http缓存是指,当客户端向服务端请求资源时。会先抵达浏览器缓存,如果浏览器缓存中有“要请求的资源”的副本,则直接从浏览器缓存中提取资源,不访问原始服务器。

常见的http缓存只能缓存get请求相应的资源,对于其他类型的响应无能为力。

http缓存是从第二次请求开始的。第一次请求资源时,服务器返回资源,并在响应头中回传资源的缓存参数;第二次请求时,浏览器判断这些请求参数,命中强缓存直接返回200;否则将请求参数带入请求头中传给服务器,看是否命中协商缓存,命中则返回304,否则服务器返回新的资源。

二,http缓存分类

1,强缓存

可使请求直接从缓存里获取资源,不访问原始服务器

2,协商缓存

强缓存不生效时进行协商缓存,一定会和服务端交互,由服务端比对资源是否更新修改。没有修改,返回304,让浏览器使用缓存中的数据。有更新时返回200,返回更新后的资源并且将缓存信息一起返回

3,私有缓存

只能用于单独的用户:Cache-Control:Pervate

4,共享缓存

可以被多个用户使用:Cache-Control:Public

三,如何使用http缓存(这段cv过来,后续待修改)

一般需要缓存的资源有html页面和其他静态资源:

1、html页面缓存的设置主要是在标签中嵌入标签,这种方式只对页面有效,对页面上的资源无效
1.1、html页面禁用缓存的设置如下:

<meta http-equiv="pragma" content="no-cache">
// 仅有IE浏览器才识别的标签,不一定会在请求字段加上Pragma,但的确会让当前页面每次都发新请求
<meta http-equiv="cache-control" content="no-cache">
// 其他主流浏览器识别的标签
<meta http-equiv="expires" content="0">
// 仅有IE浏览器才识别的标签,该方式仅仅作为知会IE缓存时间的标记,你并不能在请求或响应报文中找到Expires字段

1.2、html设置缓存如下:

<meta http-equiv="Cache-Control" content="max-age=7200" />
// 其他主流浏览器识别的标签
<meta http-equiv="Expires" content="Mon, 20 Aug 2018 23:00:00 GMT" />
// 仅有IE浏览器才识别的标签

2、静态资源的缓存一般是在web服务器上配置的,常用的web服务器有:nginx、apache。具体的配置这里不做详细介绍,大家自行查阅。
3、不想使用缓存的几种方式:
3.1、Ctrl + F5强制刷新,都会直接向服务器提取数据。
3.2、按F5刷新或浏览器的刷新按钮,默认加上Cache-Control:max-age=0,即会走协商缓存。
3.3、在IE浏览器下不想使用缓存的做法:打开IE,点击工具栏上的工具->Internet选项->常规->浏览历史记录 设置. 选择“从不”,然后保存。最后点击“删除”把Internet临时文件都删掉 (IE缓存的文件就是Internet临时文件)。
3.4、还有就是上面1、2中禁用缓存的做法
3.5、对于其他浏览器也都有清除缓存的办法

四,http缓存的几个注意点(cv,待修改)

1、强缓存情况下,只要缓存还没过期,就会直接从缓存中取数据,就算服务器端有数据变化,也不会从服务器端获取了,这样就无法获取到修改后的数据。决解的办法有:在修改后的资源加上随机数,确保不会从缓存中取。

例如:
http://www.kimshare.club/kim/common.css?v=22324432
http://www.kimshare.club/kim/common.2312331.css

2、尽量减少304的请求,因为我们知道,协商缓存每次都会与后台服务器进行交互,所以性能上不是很好。从性能上来看尽量多使用强缓存。

3、在Firefox浏览器下,使用Cache-Control: no-cache 是不生效的,其识别的是no-store。这样能达到其他浏览器使用Cache-Control:

no-cache的效果。所以为了兼容Firefox浏览器,经常会写成Cache-Control: no-cache,no-store。

4、与缓存相关的几个header属性有:Vary、Date/Age。

Vary:

vary本身是“变化”的意思,而在http报文中更趋于是“vary from”(与。。。不同)的含义,它表示服务端会以什么基准字段来区分、筛选缓存版本。
在服务端有着这么一个地址,如果是IE用户则返回针对IE开发的内容,否则返回另一个主流浏览器版本的内容。
格式:Vary: User-Agent
知会代理服务器需要以 User-Agent 这个请求首部字段来区别缓存版本,防止传递给客户端的缓存不正确。

Date/Age:

响应报文中的 Date 和 Age 字段:区分其收到的资源是否命中了代理服务器的缓存。

Date

理所当然是原服务器发送该资源响应报文的时间(GMT格式),如果你发现 Date 的时间与“当前时间”差别较大,或者连续F5刷新发现 Date 的值都没变化,则说明你当前请求是命中了代理服务器的缓存。

Age

也是响应报文中的首部字段,它表示该文件在代理服务器中存在的时间(秒),如文件被修改或替换,Age会重新由0开始累计。

作者:前端搬砖师Kim
链接:https://www.jianshu.com/p/227cee9c8d15
来源:简书
著作权归作者所有。

五,总结

1,对于强制缓存,服务器通知浏览器一个缓存时间,在缓存时间内,下次请求直接使用缓存的资源,不再时间内,执行协商缓存策略。

2,对于协商缓存,将缓存信息中的Etag和Last-Modified通过请求发送给服务器,由服务器校验,返回304状态码时,浏览器直接使用缓存。否则返回200,使用更新的资源。

http缓存相关理论相关推荐

  1. 卡尔曼滤波(kalman)相关理论以及与HMM、最小二乘法关系 转

    卡尔曼滤波(kalman)相关理论以及与HMM.最小二乘法关系_weixin_30527143的博客-CSDN博客

  2. 元胞自动机与相关理论和方法

    元胞自动机与相关理论和方法的发展有着千丝万缕的联系,一方面,元胞自动机的发展得益于相关理论的研究,如逻辑数学.离散数学.计算机中的自动机理论,图灵机思想;另一方面,元胞自动机的发展也促进了一些相关学科 ...

  3. Nginx关于浏览器缓存相关的配置指令

    浏览器缓存相关指令 Nginx需要进行缓存相关设置,就需要用到如下的指令 expires指令 expires:该指令用来控制页面缓存的作用.可以通过该指令控制HTTP应答中的"Expires ...

  4. Spring : 缓存相关注解@EnableCaching、@CacheConfig、@Cacheable、@Caching

    1.美图 2.概述 缓存相关注解 解释 @EnableCaching 开启缓存注解的支持 @CacheConfig 用于统一制定一些配置参数,这样在其他缓存注解里面就不用重复指定 @Cacheable ...

  5. trunk口_南京课工场IT培训:VLAN、Trunk与三层交换机的相关理论知识

    各位小伙伴大家好,本次和大家分享的是VLAN.Trunk与三层交换机的相关理论知识,接下来我会从下面几个方面为大家进行解析: 1.VLAN的概念及优势 2.VLAN的种类 3.静态VLAN的配置 4. ...

  6. 【MyBatis笔记12】MyBatis中二级缓存相关配置内容

    这篇文章,主要介绍MyBatis中二级缓存相关配置信息. 目录 一.MyBatis二级缓存 1.1.cache标签相关属性 (1)eviction属性 (2)size属性 (3)flushIntern ...

  7. 01路径规划问题的相关理论

    目录 1.旅行商问题 2.有能力约束的车辆路径问题 3.车辆路径主要要素特征 4.约束条件分析 5.带时间窗的车辆路径问题 6.车辆路径问题求解算法 7.小节 1.旅行商问题 旅行商问题(Travel ...

  8. 22-Mybatis缓存相关设置对一级缓存和二级缓存的影响

    上一篇:21-Mybatis二级缓存https://blog.csdn.net/fsjwin/article/details/109685894 缓存相关的设置1. <setting name= ...

  9. 产品定价相关理论_产品定价

    产品定价相关理论 While writing a quick comment on Paul Boag's recent post I thought that the issue of pricin ...

最新文章

  1. 特斯拉“国王”王权不保
  2. igstk 学习笔记
  3. WINCE6.0 中文支持
  4. python截图保存到内存卡_Python画月饼,云上过中秋,天池Python入门案例系列赛开启...
  5. RedMine 1.3.3 安装攻略
  6. 全民直播,半年“用云量”暴涨五倍
  7. IO静态映射和动态映射
  8. C语言之预处理探究(四):#、##和预定义宏
  9. 6. PHP bcompiler
  10. Android内存泄漏分析心得
  11. java -classpath or -cp 的设置和解释
  12. 电脑电池怎么测试软件,笔记本电池检测软件,小编教你笔记本电池怎么检测
  13. scrapy分布式写入到mysql_scrapy-redis分布式爬虫去重异步写入mysql数据库实例代码...
  14. 适合打游戏的计算机,最适合玩游戏的笔记本电脑 广受好评的三款笔记本
  15. KLOOK客路旅行基于Apache Hudi的数据湖实践
  16. autodesk fbx sdk sample里面的工程无法调试解决方法
  17. .class .class 和 .class.class 和 .class>.class 比较
  18. 电子商务平台到底是什么?这就告诉你!
  19. 优雅地封装和使用 ViewBinding
  20. kali linux开机黑屏只有鼠标可以移动

热门文章

  1. 腐烂国度2怎么学计算机知识,腐烂国度2操作方法详解 教你如何快速掌握操作方法...
  2. mysql sql语句执行顺序
  3. Web前端学习记录——CSS3过渡属性+定位实现简单的动画效果
  4. 2021年计算机职业高中分数线,2021中职学校录取分数线
  5. 二手手机交易存个人信息安全隐患?旧手机到底该怎么样处理?
  6. java多线程学习二、安全与不安全示例:12306买票和银行取钱、java内存模型、内存可见性、线程同步块和方法
  7. 面试篇:前端优化整理
  8. 在线生成ios证书的流程
  9. 验证码绕过、密码找回漏洞简介
  10. Re:偷了世界的程序员