HTTP协议之缓存

一、缓存的拓扑结构

    私有缓存(private cache)是个人的缓存,包含了单个用户最常用的页面

    公有缓存(public cache)又称为共享的缓存,包含了某个用户团体的常用页面

图是网上下载的HTTP协议之缓存

HTTP协议之缓存

二、缓存的处理步骤

    对一条HTTP GET报文的基本缓存处理过程包含7个步骤

    (1)、接收

    (2)、解析

    (3)、查询-缓存查看是否有本地副本可用

    (4)、新鲜度检测

    (5)、创建响应

    (6)、发送-缓存通过网络将响应发回给客户端

    (7)、日志

三、保持缓存副本的新鲜度

    本打算找个时间画个流程图,在oschina上看见@夕水溪下也写了篇缓存的博客,正好他画了这张图,直接用之,谢@夕水溪下

HTTP协议之缓存

    1、文档过期

        通过特殊的HTTP Cache-Control首部和Expires首部,HTTP让原始服务器向每个文档附加一个“过期时间”

        下面2张图,一张是Expires首部,一张是Cache-control:max-age首部

    HTTP协议之缓存

HTTP协议之缓存

        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响应

HTTP协议之缓存



未完待续。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

转载于:https://my.oschina.net/u/585378/blog/110526