zoukankan      html  css  js  c++  java
  • HTTP Cache怎样计算Age

    这里的Age指的是响应头Age。以下内容有部分翻译,也有部分自己的理解。欢迎讨论。

    我们用now表示当前主机的当前时间,用request_time表示缓存发起请求的时间,用response_time表示缓存收到响应的时间。

    HTTP/1.1要求源server的每个响应都包括一个Date头信息。表示这个响应被源server创建的时间,我们用date_value表示这个Date头的值。

    HTTP/1.1使用Age响应头表示响应从缓存中拿到时响应的寿命,我们用age_value表示Age头的值。

    缓存中响应的寿命能够通过两种全然独立的方式计算:

    1.        直接用response_time(缓存收到响应的时间)减去date_value(响应被创建的时间),假设为负数,用0替代。

    2.        假设响应路径上的全部缓存实现了HTTP/1.1,则直接用age_value值。

    但实际上,我们非常难保证响应路径上的全部缓存都实现了HTTP/1.1,所以。同一时候使用这两种方式。然后进行修正,结果会更可靠:

    corrected_received_age= max(response_time - date_value, age_value);

    到这里还没有完毕终于计算,corrected_received_age仅仅是缓存收到响应时,响应的寿命,没有考虑响应到下一个缓存或client的网络延迟时间。

    由于网络会有延迟,在传输过程中寿命已经添加了。下一个缓存就得考虑这个因素。对于这个因素,HTTP/1.1採用了一种比較保守的计算方法。假设从请求发起到收到响应的时间就是网络延迟的时间(结果不一定就是实际经过的时间),用response_delay表示:

    response_delay= response_time – request_time;

    corrected_initial_age= corrected_received_age + response_delay;

    response_delay一般指最后一个缓存到client的延误时间,假设响应路径上有多个缓存。不须要迭代。由于corrected_received_age是依据缓存收到响应的时间,已经减去了前面的网络延迟。

    以上还仅仅是计算响应第一次出如今缓存中时已经拥有的寿命。响应一旦被缓存,就可能被多次使用,这个时候,响应的寿命就得由缓存来计算了。

    我们用resident_time表示响应在缓存中贮存的时间。用current_age表示响应的当前寿命:

    resident_time= now - response_time;

    current_age= corrected_initial_age + resident_time;

    假设响应路径中有缓存。请求终于受到的响应头Age相应的值是current_age。而不是server最初给的Age,由于这个值被缓存已经改动过了。

  • 相关阅读:
    POJ 1681 Painter's Problem(高斯消元法)
    HDU 3530 Subsequence(单调队列)
    HDU 4302 Holedox Eating(优先队列或者线段树)
    POJ 2947 Widget Factory(高斯消元法,解模线性方程组)
    HDU 3635 Dragon Balls(并查集)
    HDU 4301 Divide Chocolate(找规律,DP)
    POJ 1753 Flip Game(高斯消元)
    POJ 3185 The Water Bowls(高斯消元)
    克琳:http://liyu.eu5.org
    WinDbg使用
  • 原文地址:https://www.cnblogs.com/lytwajue/p/6760121.html
Copyright © 2011-2022 走看看