http的缓存的age的计算

一、Age首部字段介绍

HTTP1.1规定,当一个Response从缓存中获得的时候,必须添加一个Age字段。这个字段的值表示从Origin Server产生该reponse或者该response validated开始,一直到现在所经过的时间的估计值(实际上,它表示的就是缓存的年龄。)。

这是一个估计值,意味着不准确,这是非常重要的,后面的Age的算法也更加充分说明了,Age的确是一个不准备的值。

Age通常与Max-Age一起使用,来确定一个response的缓存是否失效。

二、计算Age的值

关于Age的计算,HTTP1.1 RFC2616介绍的Age计算方法与RFC7234中的计算方法有所区别,相比之下,RFC7234中的计算方法得到的Age的值更加准确一些。

另外,由于RFC7234是更新的HTTP1.1的标准文档,这里介绍的是RFC7234中的计算方法。

Age在本质上等于reponse在路径上所有缓存server上停留的时间之和再加上路径上传输所花费的之间之和。

1、基本概念

age_value :这是Age字段的值,如果不存在,就认为是0。
date_value:这是Date字段的值。
now :本机的当前时间。
request_time:本次request的到达的时间。
response_time:本次response到达的时间。
一个response的Age的计算有两种方式:
第一种apparent_age:response_time 减去 date_value,这个值的准确度要求本地始终与Origin Server的始终进行时间同步。如果apparent_age的值为负数,则设置为0。
公式: apparent_age = max(0, response_time - date_value);
这种方法计算简单,但是如果本地时间与Origin Server的时间不同步,那么就会出现问题。甚至,如果本地时间晚于Origin Server时间,那么就会出现负数,于是这里规定此时的值为0。
第二种corrected_age_value:如果路径上,所有的Cache Server都采用HTTP1.1,那么就可以使用这种计算方法。缓存接受到的reponse的Age,等于上一跳缓存的Age加上传输时延,于是就有了如下公式。
公式:
response_delay = response_time - request_time;
corrected_age_value = age_value + response_delay;
这里的时延为什么不除以2?
假设除以2,确实得到了一个单程的时延,但是这个时延是一个估计值,并不是真真正正的reponse的返回时延。而且该值可能小于response 的返回时延,这就有可能导致一个结果,计算得到的Age的值小于真实的Age的值,这会导致后续与Max-Age等值比对的时候,出现偏差导致计算Age < 真实Age = Max_Age,导致缓存Server返回过期的response。
 
假设不除以2,那么得到的值是往返时延,此时的时延值必然是大于response的返回时延,那么计算得到的Age的值就必然大于真实的Age值,在后续与Max-Age等值比对的时候,真实Age < 计算Age=Max-Age = Max-Age,那么此时response就会过期,从而永远不会返回一个过期的reponse。
所以,这其实是一种机制,一种保证缓存不会返回过期reponse的机制。

综上两种办法,可以得到缓存中一个Age的初始值,该初始值表示的是接收到response时候的Age值:

corrected_initial_age = max(apparent_age, corrected_age_value);
Age无时无刻都在改变,那么当前的Age值该怎么计算呢?
resident_time = now - response_time;
current_age = corrected_initial_age + resident_time;
current_age的值用于设置reponse的Age字段。
当一个缓存Server接收到一个request的时候,如果对应的缓存还没有过期,那么就会返回缓存中的reponse,此时就需要计算current_age的值,然后设置response中的Age字段了。
当然,如果此时计算得到的Age的值表明该response已经过期了,那么缓存就会像Origin Server发送新的请求获取response了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值