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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值