作者简介

李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷。喜欢钻研底层技术,认为底层基础才是王道。一切新技术都离不开操作系统(CPU、内存、磁盘)、网络等。坚持输入输出,记录自己学习的点滴,在平凡中坚持前行,总有一天会遇见不一样的自己。公众号:运维汪(ID:Leeeee_Li)。
                                                                 
                                                                                   
 

一、缓存的优点

1、减少冗余数据传输
当很多客户端访问一个服务器时,服务器会多次传输一份文档每次传送给一个客户端。一些相同的字节会在网络中一遍遍的传输,这些冗余的数据传输会耗尽网络带宽,降低传输速度,加种Web服务器的负载。有了缓存,就可以保留第一条服务器响应的副本,后续请求就可以由缓存的副本来响应。
 
2、缓解网络瓶颈
缓存可以缓解网络的瓶颈。很多网络为本地网络客户端提供的带宽比远程服务器提供的带宽要宽。客户端会以路径上最慢的网速访问服务器。如果客户端从一个快速局域网的缓存中得到了一个副本,那么缓存就可以提高性能,尤其在传输的文件比较大时。
 
3、瞬间拥塞
缓存在破坏瞬间拥塞时起到重要的作用。
 
4、距离时延
当带宽不成问题的情况下,每台路由器会增加因特网流量的时延。
 

二、缓存命中

1、缓存命中  
 
已有的副本为某些到达缓存的请求提供服务,称为缓存命中(cache hit)
 

2、缓存未命中
 
一些到达缓存的请求可能会由于没有副本可用,而被转发到原始服务器,称为缓存未命中(cache miss)
 

3、HTTP再验证
 
原始服务器的内容可能会发生变化,缓存要对其进行检测,看他们保存的副本是否仍然是服务器上最新的副本,这种新鲜度检测被称为HTTP再验证。
 
3.1、再验证命中
 
缓存对缓存的副本进行再验证时,会向原始服务器发送一个小的再认证请求。如果内容没有变化,服务器返回304 Not Modified。这种认证称为再验证命中(revalidate hit)或缓慢命中(slow hit)
 

3.2、再验证未命中
 
如果服务器对象已与缓存副本不同,服务器返回200 OK
 

3.3 对象被删除
 
如果服务器对象已经被删除了,服务器就返回404 Not Found响应,缓存也会将其副本删除。
 
4、缓存命中率
 
缓存提供服务的请求所占的比例称为缓存命中率(cache hit rate),也称文档命中率(document hit rate)。
 
5、字节命中率
 
字节命中率表示的是缓存提供的字节在传输的所有字节中所占的比例。
 
 

三、缓存的处理步骤

1、接收--缓存从网络中接收抵达的请求报文。
2、解析--缓存对报文进行解析,提取出URL和各种首部。
3、查询--缓存查看是否有本地副本可用,如果没有,就去服务器获取一份并保存在本地。
4、新鲜度检查--缓存查看已缓存的副本是否新鲜,如果不是,就询问服务器是否有任何更新。
5、创建响应--缓存用新的首部和已缓存的主体来构建一条响应报文。
6、发送--缓存通过网络将响应发回给客户端。
7、日志--缓存可选的创建一个日志文件条目来描述这个事务。
 
 

四、标记

1、过期响应首部
 
Cache-Control: max-stale 缓存可以随意提供过期的文件
Cache-Control: max-stale=<s> 在<s>秒时间内,文档就不能过期
Cache-Control: min-fresh=<s> 至少在为了<s>秒内文档要保持新鲜
Cache-Control: max-age 资源能够被缓存(保持新鲜)的最大时间,max-age是距离请求发起的时间的秒数
Cache-Control:no-cache 每次由请求发出时,缓存会将此请求发送到服务器进行再认证,如果没有过期,缓存才使用本地的缓存副本返回
Cache-Control:no-store 缓存中不得存储任何关于客户端和服务端响应的内容,每次由客户端发起的请求都会下载完整的响应内容
Expires 指定一个绝对的过期日期,如果过期日期已经过了,就说明文档不再新鲜了。如Wed, 06 Jan 2021 09:35:39 GMT
 
在缓存文档过期前,缓存可以任意频率使用这些副本,无需与服务器联系(特殊情况除外)。一旦已缓存文档过期,缓存就必须与服务器进行核对,询问文档是否被修改过,如果被修改过,就要获取一份新的(带有新的过期日期)的副本。
 
2、条件方法再验证
 
If-Modified-Since: <date> 如果从指定日期之后文档被修改过了,就执行请求的方法。可以与Last-Modifed服务器响应首部配合使用,只有在内容被修改后与已缓存版本有所不同的时候采取获取内容。
If-None-Match:<tags> 服务器可以为文档提供特殊的标签(ETag),而不是将其与最近修改的日期相匹配。这些标签就像序列号一样。如果已缓存标签与服务器文档中的标签不一样。If-None-Match首部就会执行所请求的方法。
 

五、学习交流

欢迎大家关注我的公众号,一起交流、学习。

 

图解HTTP权威指南(五) | HTTP缓存的更多相关文章

  1. 图解HTTP权威指南(四)| 代理

    作者简介 李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷.喜欢钻研底层技术,认为底层基础才是王道.一切新技术都离不开操作系统(CPU.内存.磁盘).网络等. ...

  2. 图解HTTP权威指南 | HTTP报文

                                                                                    一.问题 1.报文流是如何流动的 2.H ...

  3. 图解HTTP权威指南(二)| 连接管理

    一.两个问题 1.HTTP是如何使用TCP连接的 2.HTTP的连接,并行连接.keep-alive(持久连接)和管道化连接   二.TCP连接 1.什么是TCP   TCP/IP是全球计算机及网络设 ...

  4. 图解HTTP权威指南(三)| Web服务器对HTTP请求的处理和响应

    作者简介   李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷.喜欢钻研底层技术,认为底层基础才是王道.一切新技术都离不开操作系统(CPU.内存.磁盘).网络 ...

  5. maven权威指南学习笔记(五)—— POM

    1. 简介 Archetype插件通过 pom.xml 文件创建了一个项目.这就是项目对象模型 (POM),一个项目的声明性描述. 当Maven运行一个目标的时候,每个目标都会访问定 义在项目POM里 ...

  6. maven POM —— maven权威指南学习笔记(五)

    1. 简介 Archetype插件通过 pom.xml 文件创建了一个项目.这就是项目对象模型 (POM),一个项目的声明性描述. 当Maven运行一个目标的时候,每个目标都会访问定 义在项目POM里 ...

  7. 《Kafka权威指南》读书笔记-操作系统调优篇

    <Kafka权威指南>读书笔记-操作系统调优篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 大部分Linux发行版默认的内核调优参数配置已经能够满足大多数应用程序的运 ...

  8. Http权威指南学习研究

    学习时间:                                   该学习:第六章  6.6小节   加油   185页 2017年5月15日15:13:00 今天任务: 看完前两章节: ...

  9. (6)《Head First HTML与CSS》学习笔记---结尾、《HTML5权威指南》读书笔记

    1.内联元素的外边距.内边距与块元素稍有不同. 如果一个内联元素四周都增加外边距,只能看到左边和右边会增加空间:你也可以对内联元素的上下增加内边距,不过这个内边距不会影响包围它的其他内联元素的间距—— ...

随机推荐

  1. PyQt程序执行时报错:AttributeError: 'winTest' object has no attribute 'setCentralWidget'的解决方法

    用QtDesigner设计了一个UI界面,保存在文件Ui_wintest.ui中,界面中使用了MainWindow窗口,窗口名字也叫MainWindow,用PyUIC将其转换成了 Ui_wintest ...

  2. 认识 Cargo-Rust构建工具和包管理器

    认识 Cargo-Rust构建工具和包管理器 上两篇文章 都有说到 hello world 程序,但是我们如果使用自己创建文件的方式创建项目,一旦文件多了,那得多麻烦,整个项目将变得难以管理.下面我来 ...

  3. Codeforces Edu Round 67 A-C + E

    A. Stickers and Toys 考虑尽量先买\(max(s, t)\)个里面单独的.那么如果\(s + t > n\)那么\(s + t - n\)的部分就该把\(min(s, t)\ ...

  4. EM 算法-对鸢尾花数据进行聚类

    公号:码农充电站pro 主页:https://codeshellme.github.io 之前介绍过K 均值算法,它是一种聚类算法.今天介绍EM 算法,它也是聚类算法,但比K 均值算法更加灵活强大. ...

  5. Hive通过Jdbc获取表的字段信息

    参考代码如下: /** * 按顺序返回字段 * desc table的返回结果形式如下: hive> describe ind01acoM; OK acq_ins_id_cd string cu ...

  6. react第四单元(ref与DOM-findDomNode-unmountComponentAtNode)

    第四单元(ref与DOM-findDomNode-unmountComponentAtNode) #课程目标 理解react的框架使用中,真实dom存在的意义. 使用真实dom和使用虚拟dom的场景. ...

  7. node目录

    1 [了解nodejs] 1.1 [node简介] 1.2 [node的特点] 1.3 [如何安装] 1.4 [如何运行] 2 [es6--基本语法] 2.1 [变量的解构赋值] 2.2 [解构赋值] ...

  8. Flink问题1

    flink问题1 报错: More buffers requested available than totally available 查看源码: /** * This method makes s ...

  9. Docker教程:使用Docker容器运行Nginx并实现反向代理

    一.前言 我们知道,为了安全考虑,我们一般会设置反向代理,用来屏蔽应用程序真实的IP和端口号.在Linux系统上最常用的反向代理就是Nginx.本篇文章中,我们会通过Docker容器分别运行一个Ngi ...

  10. C#注册OCX控件

    注意 COM组件注册到注册表中的位置,是CLSID还是TypeLib 注册方法 代码执行 //声明注册方法 [DllImport("C:\\Windows\\barcodex.ocx&quo ...