HTTP缓存算法研究和实现.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
HTTP缓存算法研究和实现

HTTP缓存算法研究和实现   摘要摘要:数据缓存技术可以有效减少网络拥塞,减轻服务器负载,加快信息访问速度。常见的缓存验证机制有文档过期(Document Expiration)和服务器再验证(Server Revalidation)。LRU是一种高效的缓存置换算法,缓存中最近最少访问的文档会被删除。基于以上机制和方法,研究并实现了一种HTTP缓存算法。   关键词关键词:HTTP;数据缓存;缓存算法   DOIDOI:10.11907/rjdk.1511210   中图分类号:TP312   文献标识码:A文章编号文章编号2016)001006902   0引言   缓存[1]是可以自动保存常用文档副本的HTTP设备。HTTP缓存服务器位于客户端和服务器之间,当Web请求抵达缓存服务器时,如果本地有已缓存的副本,即可从本地设备提取该文档。使用缓存有以下优点:①减少冗余的数据传输;②提高页面加载速度,解决网络瓶颈问题;③减少对源服务器的请求,避免服务器瞬间拥塞;④降低因距离产生的网络时延。   1缓存分类及命中   私有缓存:为单个用户提供服务,一般为浏览器内置,允许用户配置存储空间,常用文档存储在个人计算机的磁盘和内存中。   共有缓存:为某个用户团体提供服务的共享代理服务器,接受多个用户的访问请求。   如果缓存中已有的副本能够为某些客户端请求提供服务,被称为缓存命中[2]。如果缓存中没有某些客户端请求的副本,需要源服务器提供,被称为缓存未命中。   2副本新鲜保持机制   HTTP可以通过文档过期(Document Expiration)和服务器再验证(Server Revalidation)机制使已缓存数据与源服务器数据保持一致。   2.1文档过期   服务器可以使用HTTP/1.0+的Expires或HTTP/1.1的CacheControl:maxage[4]响应首部来指定文件过期日期。   Expires:指定一个绝对的过期日期。   Cachecontrol:maxage:定义文档的最大使用期,从第一次生成文档到文档不再新鲜、无法使用为止,最大的合法生存时间。   2.2服务器再验证   如果缓存文档已过期,缓存服务器则需要询问源服务器文档是否已发生变化,这个过程被称为服务器再验证。如果再验证显示文档内容发生了变化,缓存则会从源服务器获得一份新文档;如果再验证显示文档内容没有发生变化,缓存只需获取并更新一个包含新的过期日期的首部。   HTTP的条件方法[5]可以高效地实现再验证。常用的条件方法有以下两种:   (1)IMS(IfModifiedSince)。IfModifiedSince首部通常与Last Modified服务器响应首部配合工作。客户端在发送HTTP请求时,会将浏览器端缓存页面的最后修改时间一起发到服务器,服务器把该时间与服务器上实际文件的最后修改时间进行比较。如果时间一致,则返回HTTP状态码304(不返回文件内容);如果时间不一致,则返回HTTP状态码200和新的缓存文档。   (2)实体标签(ETag)再验证。实体标签又被称为版本标识符,是附加到文档上的引用字符串,可能包含了文档序列号或版本名称。某些文档可能会进行周期性重写,部分文档可能发生了并不重要的变化,不需要缓存对其进行更新。遇到这种情况,则需要使用ETag和 IfNoneMatch首部进行再验证,将缓存和服务器中的ETag进行比较,如果不匹配,则会请求获得一个新的文档对象。   IfNoneMatch首部可以包含若干个ETag,告诉服务器带有这些实体标签的对象副本在缓存中已存在。例如:IfNoneMatch:“v1.0”,“v1.1”,“v1.2”;IfNoneMatch:“header”,“B43AEC0195”,“Profiles in courage”。   2.3试探性过期   如果源服务器响应中没有Expires首部与Cachecontrol:maxage首部,缓存可以计算出一个试探性最大试用期。   缓存根据响应的LastModified首部来决定该文档是否需要再验证,如果LastModified首部中的日期是很早之前,那么缓存认为文档近期之内应该不会发生变化,将其保留在缓存中也会比较安全;如果LastModified中的日期是最近,那么缓存认为文档可能经常改变,在进行服务器再验证之前,只应将其保留很短时间。显然,这种粗略的判断不是很严谨,因此设置服务器的Expires和CacheControl首部是很有必要的。   3LRU缓存算法   LRU[3](Least Recently Used)即最近最少使用置换算法。LRU算法的设计原则

文档评论(0)

bokegood + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档