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)的协议,除了诸如名称服务和分布对象管理系统之类的超文本用途外 ...
随机推荐
- Educational Codeforces Round 6 D. Professor GukiZ and Two Arrays 二分
D. Professor GukiZ and Two Arrays 题目连接: http://www.codeforces.com/contest/620/problem/D Description ...
- (转)Servlet
1. Servlet和GCI的区别? 答:Servlet是基于Java编写的,处于服务器进程中,它能够通过多线程方式运行service()方法,一个实例可以服务于多个请求,而且一般不会销毁:而CGI ...
- Xcode8 报 ”xx“is missing from working copy 的问题解决方法
方法一: Xcode->Preferences->Source->Enable Source Control 勾勾去掉 方法二: Xcode8更新后,编译工程一下子报出800多条类似 ...
- python 数据分析 Matplotlib常用图表
Matplotlib绘图一般用于数据可视化 常用的图表有: 折线图 散点图/气泡图 条形图/柱状图 饼图 直方图 箱线图 热力图 需要学习的不只是如何绘图,更要知道什么样的数据用什么图表展示效果最好 ...
- ajax跨域的解决方案
前言 公司要做一个活动页面,在其过程中发现所有的接口,ajax请求跨域.这里对跨域做个简单介绍以及提供几种解决办法. 由于浏览器实现的同源策略的限制,XmlHttpRequest只允许请求当前源(域名 ...
- nodejs+mysql入门实例
此前我已准备好mysql,使用的是PHP的组合包Appserv 手动添加数据库依赖: 在package.json的dependencies中新增, “mysql” : “latest”, { &quo ...
- ImageWriter制作ubuntu的U盘启动盘
转自:http://my.oschina.net/f839903061/blog/197935?p={{currentPage+1}} 1.工具从ubuntn中文网中下载指定软件:ImageWrite ...
- 本地环境 XAMPP+phpStorm+XDebug+chrome配置和断点调试
不明白phpStorm+XAMPP+chrome组合的phpStorm配置XDebug的断点调试,很多种网页办法都看过了,可用,但没达预期.QQ群问,一个大牛很奇怪我都配置了怎么还不正确,很干脆地说远 ...
- Spark Streaming no receivers彻底思考
数据接入Spark Streaming的二种方式:Receiver和no receivers方式 建议企业级采用no receivers方式开发Spark Streaming应用程序,好处: 1.更优 ...
- SVN-两种存储方式的比较(BDB vs. FSFS)
Subversion 的版本库(repository),就是位于服务器端,统一管理和储存数据的地方.本文中,我们以 Linux 为例,介绍在服务器端配置和管理 Subversion 版本库的基本方法. ...