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,由于这个值被缓存已经改动过了。
HTTP Cache怎样计算Age的更多相关文章
- 计算机系统原理:cache容量计算
Cache容量计算例题: 假定主存地址位数为32位,按字节编址,主存和cache之间采用4-路组相联映射方式,主存块大小为4个字,每字32位,采用直写(Write Throght)方式和LRU替换策略 ...
- buffer和cache有什么本质区别
在free命令展示机器的内存消耗情况,会像这样展示
- cache与SDRAM
hugohong hugohong 本版等级: #2 得分:20回复于: 2009-04-19 21:51:03 牛人说的,拿出来分享一下:cache是高速缓冲, 解决高速cpu和相对低速sdra ...
- 【转】UVa Problem 100 The 3n+1 problem (3n+1 问题)——(离线计算)
// The 3n+1 problem (3n+1 问题) // PC/UVa IDs: 110101/100, Popularity: A, Success rate: low Level: 1 / ...
- Ehcache(2.9.x) - API Developer Guide, Searching a Cache
About Searching The Search API allows you to execute arbitrarily complex queries against caches. The ...
- 把对象缓存到HttpRuntime.Cache里,你能安全地使用它吗?
每每勤勤恳恳,思来想去,趁还有激情,先把它记录下来... 定义一个Stu的类: public class Stu { public string Name { get; set; } public i ...
- 使用Free命令查看Linux服务器内存使用状况(-/+ buffers/cache详解)
free命令可选参数 -b,-k,-m,-g show output in bytes, KB, MB, or GB -h human readable output (automatic unit ...
- 计算hashCode通用计算公式
1.java计算公式 @Override public int hashCode() { //设置初始值 ; //假设有效域为: name,age,idCardNo,incomeAnnual,sex, ...
- HTTP超文本传输协议-HTTP/1.1中文版
摘要 超文本传输协议(HTTP)是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议.它是一种通用的,不分状态(stateless)的协议,除了诸如名称服务和分布对象管理系统之类的超文本用途外 ...
随机推荐
- 十一. 图形、图像与多媒体5.Graphics2D类的绘图方法
Java语言在Graphics类提供绘制各种基本的几何图形的基础上,扩展Graphics类提供一个Graphics2D类,它拥用更强大的二维图形处理能力,提供.坐标转换.颜色管理以及文字布局等更精确的 ...
- MYSQL复习笔记10-连接
Date: 20140219Auth: Jin 一.介绍连接是二元运算,可以对两个表或多个表进行查询.T-SQL中分两大类,一是符合SQL标准的连接谓词表示形式,二是T-SQL扩展的使用关键字JOIN ...
- 一个 go 文件服务器 ssdb
file system ssdb go http listen 文件存储到 ssdb gfs | twemproxy | ssdb(master) ssdb(slave) ssdb 连接协议为 red ...
- 怎么查看和修改 MySQL 的最大连接数
通常,mysql的最大连接数默认是100, 最大可以达到16384.1.查看最大连接数:show variables like '%max_connections%';2.修改最大连接数方法一:修改配 ...
- PASCAL 的开源工具
PASCAL 的开源工具: 1)free pascal 代码编译器 http://www.freepascal.org/ 2)lazarus 图形界面开发工具 http://www.la ...
- jquery children()方法
1.测试代码 <!DOCTYPE html> <html> <head> <script type="text/javascript" s ...
- 关于weblogic server对docker的支持
Docker是目前比较热门的一个技术话题,WebLogic Server从12.1.3版本支持Docker,但对于操作系统和内核有一定的要求,具体参考下表 我曾在ubuntu,Oracle Enter ...
- AQTime教程
1 简介 AQTime和MemProof都是AutomatedQA旗下的产品,AQTime比MemProof提供了更丰富强大的功能.该产品含有完整的性能和调试工具集,能够收集程序运行时关键的性能信息和 ...
- Git系列四之在本地服务器搭建gitlab仓库管理
1.Git仓库管理 现在本地已经创建了git仓库,又在gitlab上创建了一个git仓库,并且让这两个仓库进行远程同步,这样gitlab仓库既可以备份也可以与他人协作管理远程仓库以及根据需要推送或拉取 ...
- 解决在win系统下使用DOS命令开启TensorBoard的问题及方法步骤
解决在win系统下使用DOS命令开启TensorBoard的问题及方法步骤: TensorBoard是TensorFlow下的一个可视化的工具,能够帮助研究者们可视化训练大规模神经网络过程中出现的复杂 ...