缓存

缓存拓扑结构:

私有缓存:

大多数浏览器将常用文档存在个人电脑的磁盘或者内存中

公有缓存(代理缓存):

缓存代理服务器 

  代理缓存 层次化  一级缓存 二级缓存

缓存的处理步骤

1 接收——缓存从网络中读取抵达的请求报文

2 解析——缓存对报文进行解析,提取出URL和各种首部

3 查询——缓存查看是否有本地副本可用,如果没有,就获取一份副本(并将其保存在本地)

4 新鲜度检测——缓存查看已缓存副本是否足够新鲜,如果不是,就询问服务器是否有任何更新(再验证)

5 创建响应——缓存会用新的首部和已缓存的主体来构建一条响应报文

6 发送——缓存通过网络将响应发回给客户端

7 日志——缓存可选地创建一个日志文件条目来描述这个事务

新鲜度检测:  

Last-Modified和Etags如何帮助提高性能? 

服务器:  Last-Modified              Etags

客户端: If-Modified-Since          If-None-Match

   这样可利用客户端(例如浏览器)的缓存。因为服务器首先产生 Last-Modified/Etag标记,服务器可在稍后使用它来判断页面是否已经被修改。本质上,客户端通过将该记号传回服务器要求服务器验证其(客户端)缓存。 

        过程如下:

                1. 客户端请求一个页面(A)。 

                2. 服务器返回页面A,并在给A加上一个Last-Modified/ETag。 

                3. 客户端展现该页面,并将页面连同Last-Modified/ETag一起缓存。 

                4. 客户再次请求页面A,并将上次请求时服务器返回的Last-Modified/ETag一起传递给服务器。 

                5. 服务器检查该Last-Modified或ETag,并判断出该页面自上次客户端请求之后还未被修改,直接返回响应304和一个空的响应体。

示例:

Last-Modified: Fri, 12 May 2006 18:53:33 GMT

If-Modified-Since: Fri, 12 May 2006 18:53:33 GMT

ETag是一个可以与Web资源关联的记号(token)

服务器端返回的格式:

        ETag: "50b1c1d4f775c61:df3"

客户端的查询更新格式是这样的:

        If-None-Match: W/"50b1c1d4f775c61:df3"

原文地址:https://www.cnblogs.com/chengdabelief/p/6541509.html