作者简介

李先生(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(Python+Qt)学习随笔:QLineEdit行编辑器功能详解

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.概述 QLineEdit部件是一个单行文本编辑器,支持撤消和重做. ...

  2. 第8.23节 Python中使用sort/sorted排序与“富比较”方法的关系分析

    一. 引言 <第8.21节 Python中__lt__.gt__等 "富比较"("rich comparison")方法用途探究>和<第8.2 ...

  3. PyQt(Python+Qt)学习随笔:QTableWidget表格部件中行高和列宽的计算方式

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTableWidget表格部件中行高和列宽的计算在Qt提供的资料中内容介绍比较泛,细节说得不清楚, ...

  4. PyQt(Python+Qt)学习随笔:model/view架构中的QStringListModel

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.QStringListModel介绍 QStringListModel是Qt提供的一个已经实现Q ...

  5. autojs websocket 核心示例代码,云控技术

    //初始化方法 function recordInit(scriptName){ //let ipInfoJson = getIP() // let ip = ipInfoJson.cip // le ...

  6. 6、Sping Cloud Feign

    1.Spring Cloud Feign简介 (1).Fegin简介 官方文档:http://projects.spring.io/spring-cloud/spring-cloud.html#spr ...

  7. java视频流的断点续传功能

    项目中需要实现浏览器中视频的拖动问题解决 /** * 视频文件的断点续传功能 * @param path 文件路径 * @param request request * @param response ...

  8. 百度前端技术学院-基础-day22-24

    第二十二天到第二十四天:JavaScript里面的居民们 task1 题目: <div> <label>Number A:<input id="radio-a& ...

  9. CSP-S 2019 Emiya 家今天的饭

    64 pts 类似 乌龟棋 的思想,由于 \(64pts\) 的 \(m <= 3\), 非常小. 我们可以设一个 \(dp\),建立 \(m\) 个维度存下每种物品选了几次: \(f[i][A ...

  10. js处理浏览器兼容

    1.try  catch 在try中执行我们的代码,如果在执行的过程中发生了异常信息,我们在catch中写代替的执行方案 前提:不兼容四位情况下,执行对应的代码,需要发生异常错误才可以检测到 弊端:不 ...