HTTP协议之缓存
一、缓存的拓扑结构
私有缓存(private cache)是个人的缓存,包含了单个用户最常用的页面
公有缓存(public cache)又称为共享的缓存,包含了某个用户团体的常用页面
图是网上下载的
二、缓存的处理步骤
对一条HTTP GET报文的基本缓存处理过程包含7个步骤
(1)、接收
(2)、解析
(3)、查询-缓存查看是否有本地副本可用
(4)、新鲜度检测
(5)、创建响应
(6)、发送-缓存通过网络将响应发回给客户端
(7)、日志
三、保持缓存副本的新鲜度
本打算找个时间画个流程图,在oschina上看见@夕水溪下也写了篇缓存的博客,正好他画了这张图,直接用之,谢@夕水溪下
1、文档过期
通过特殊的HTTP Cache-Control首部和Expires首部,HTTP让原始服务器向每个文档附加一个“过期时间”
下面2张图,一张是Expires首部,一张是Cache-control:max-age首部
Expires首部和Cache-control:max-age首部所做的事情本质上是一样的,但由于Cache-control首部使用的是相当时间而不是绝对时间,所以更倾向于使用Cache-control首部
max-age值定义了文档最大使用期-从第一次生成文档到文档不再新鲜、无法使用为止,最大的合法生存时间(秒)
Expires指定一个绝对的日期
2、用条件方法进行再验证
HTTP定义了5个首部
(1)If-Modified-Since:<date>如果从指定日期之后文档被修改过,就执行请求方法。可以与Last-Modified服务器响应首部配合使用。
(2)If-None-Match:<tags>服务器可以为文档提供特殊的标签,而不是将其与最近修改日期匹配,这些标签就像***一样。
(3)If-Unmodified-Since在进行部分文件传输时,获取文件的其余部分之前要确保文件未发生变化,此时,这个首部才非常有用
(4)If-Range支持不完整文档的缓存
(5)If-Match用于Web服务器打交道时的并发控制
其中(1)(2)对缓存在验证来说是最有用的2个首部,If-modified-Since再验证请求通常称为IMS请求
a.如果自指定日期后,文档被修改了,If-Modified-Since条件为真,通常Get会成功执行,携带新首部的新文档会被返回给缓存,自然还包括一个新的过期时间
b.如果自指定日期后,文档没有被修改过,条件就为假,会向客户端返回一个304Not Modified响应报文,为了提高有效性,不会返回文档主体。
下图给出的是一个304响应
未完待续。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
转载于:https://my.oschina.net/u/585378/blog/110526