作者简介

李先生(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. 第14.12节 Python中使用BeautifulSoup解析http报文:使用select方法快速定位内容

    一. 引言 在<第14.10节 Python中使用BeautifulSoup解析http报文:html标签相关属性的访问>和<第14.11节 Python中使用BeautifulSo ...

  2. PyQt学习随笔:Model/View架构中的Delegate(委托)

    不同于MVC模式,Model/View设计并不包含用于处理与用户交互的完全独立的部件, 没有将用户交互部分完全分离.一般地,视图负责把模型数据显示给用户,以及处理用户的输入.但是,对于某些特殊要求(比 ...

  3. PyQt(Python+Qt)学习随笔:Qt Designer中主窗口对象的dockOptions属性

    dockOptions属性代表主窗口对浮动部件停靠的反应,其类型为枚举类型QMainWindow.DockOptions.相关取值及含义如下: 这些枚举值可以组合使用,仅控制如何在QMainWindo ...

  4. CTF SHOW WEB_AK赛

    CTF SHOW平台的WEB AK赛: 签到_观己 <?php ​ if(isset($_GET['file'])){ $file = $_GET['file']; if(preg_match( ...

  5. XSS挑战赛(1)

    以前囫囵吞枣做过一遍,现在从头再来 第一关网址为:http://127.0.0.1/xss-labs-master/level1.php?name=test 而页面上显示了用户test,name可控, ...

  6. DVWA学习笔记

    原来装的DVWA没有认认真真地做一遍,靶场环境也有点问题了,到github上面重新下载了一遍:https://github.com/ethicalhack3r/DVWA 复习常见的高危漏洞,产生,利用 ...

  7. 【Tomcat 源码系列】源码构建 Tomcat

    一,前言 这篇博客写于 12 月 12 日,从 github[1] 上 fork 了一份 tomcat 的源代码,clone 到了本地.最近想把 tomcat 的源代码分析一下,寒假的时候有完整的时间 ...

  8. PHP 读取XML大文件格式并将其存入数据库中

    <?php     $xml = new XMLReader(); $xmlfile="./full_database.xml";#文件路径   $xml->open( ...

  9. Fabric 配置 order节点问题

    问题描述: Error: failed to create deliver client: orderer client failed to connect to orderer.example.co ...

  10. [日常摸鱼]bzoj1218[HNOI2003]激光炸弹-二维前缀

    题意:二维网格一些格子有权值,求用边长为$r$的正方形能覆盖到格子权值和的最大值,格子大小$ \leq 5000$ 非常裸的二维前缀,然而 题目下标从0开始! QAQ 要是比赛就要爆零啦- #incl ...