web.docx
- 文档编号:2845299
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:21
- 大小:86.85KB
web.docx
《web.docx》由会员分享,可在线阅读,更多相关《web.docx(21页珍藏版)》请在冰豆网上搜索。
web
Web开发人员需知的Web缓存知识
oschina 发布于:
2013年06月14日(30评)
分享到
新浪微博腾讯微博
收藏+582
原文出处:
mnot 译文出处:
张鑫旭
最近的译文距今已有4年之久,原文有一定的更新。
今天踩着前辈们的肩膀,再次把这篇文章翻译整理下。
一来让自己对web缓存的理解更深刻些,二来让大家注意力稍稍转移下,不要整天HTML5,面试题啊叨啊叨的~~
什么是Web缓存,为什么要使用它?
Web缓存游走于服务器和客户端之间。
这个服务器可能是源服务器(资源所驻留的服务器Add),数量可能是1个或多个;这个客户端也可能是1个或多个。
Web缓存就在服务器-客户端之间搞监控,监控请求,并且把请求输出的内容(例如html页面、图片和文件)(统称为副本)另存一份;然后,如果下一个请求是相同的URL,则直接请求保存的副本,而不是再次麻烦源服务器。
使用缓存的2个主要原因:
∙降低延迟:
缓存离客户端更近,因此,从缓存请求内容比从源服务器所用时间更少,呈现速度更快,网站就显得更灵敏。
∙降低网络传输:
副本被重复使用,大大降低了用户的带宽使用,其实也是一种变相的省钱(如果流量要付费的话),同时保证了带宽请求在一个低水平上,更容易维护了。
Web缓存的类型
1. 浏览器缓存
在任何现代浏览器上(如IE,FireFox,Chrome)折腾清除隐私数据(//zxx:
原文说的是首选项,显然out了,这里有改动)的对话框,你很可能会注意到“缓存”这个设置项。
浏览器会在你的硬盘上专门开辟一个空间专门为你存储资源副本。
浏览器缓存的工作规则很简单:
检查以确保副本是最新的,通常只要一次会话(就是当前浏览器调用的这次N)。
浏览器缓存在用户触发“后退”操作或点击一个之前看过的链接的时候很管用。
同样,如果你在网站上访问同一张图片,该图片可以从浏览器缓存中调出并几乎立即显现出来。
2.代理服务器缓存
Web代理服务器使用同样的缓存原理,只是规模更大。
代理以同样的方式服务千万用户,大公司和ISP(InternetServerProvider,Internet服务提供商Add)经常在他们的防火墙或者单独的设备(也被称为中介(intermediaries))上架设代理缓存。
由于代理服务器缓存并非客户端或者源服务器的一部分,而是处于网络中,请求需要以某种方式路由到它们。
一种方法是手动设置,告诉浏览器的你常用的代理服务器(//zxx:
翻墙的时候常用的),另外就是使用拦截。
拦截代理(Interceptionproxies)把Web请求根据自己的底层网络重定向,因此,客户端无需配置,甚至都不需要知道它们。
//zxx:
维基百科上提供的几种检测拦截代理服务器存在的方法add,您若有兴趣,可以点击这里查看。
代理缓存属于一种共享缓存;往往有大量的用户使用,因此,其在降低延时和网络流量上很有用,毕竟每个副本都被大量重用。
//zxx:
这里我有疑问:
就算是放在代理服务器上,每次获取还是要通过网络的啊,如何降低了网络流量呢?
希望谁可以帮忙解惑下。
3.网关缓存
也被称为“反向代理缓存”或“替代缓存”。
网关缓存同样是起中介作用的,不过不是(素不相识、不曾谋面的Add)网络管理员部署的,而多半是网站管理员(公司专门的运维工程师、或UED或程序组某人Add)他们自己部署,这样更容易扩展与维护。
可以有多种方法把请求路由到网关缓存,但通常使用某种形式的负载均衡器①,使它们中的一个或多个看起来像是源服务器。
内容分发网络②(CDNs)为整个网络(或部分)分配网关缓存,然后把这些缓存卖给需要的网站。
Speedera③和Akamai④就是代表性的网络内容发布商。
①负载均衡器:
是一种采用各种分配算法把网络请求分散到一个服务器集群中的可用服务器上去,通过管理进入的Web数据流量和增加有效的网络带宽,从而使网络访问者获得尽可能最佳的联网体验的硬件设备。
②内容分发网络:
即CDN,基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。
通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。
其目的是使用户可就近取得所需内容,解决Internet网络拥挤的状况,提高用户访问网站的响应速度。
③Speedera:
是一家全球性的内容服务提供商,它与北美、欧洲以及亚太地区的1000多家大型运营商都有联系,并为那些不想在自己服务器上寄存内容的公司提供软件下载、媒体及其它服务管理等业务。
05年的时候被下面要介绍的Akamai以$130m的价格给收购了。
④Akamai:
美国Akamai是国际上最大的CDN服务商,它巨大的网络分发能力在峰值时可达到15Tbps。
Akamai公司是为数不多的旨在消除Internet瓶颈和提高下载速度的几家新公司之一,是一个致力于网络交通提速的”内容发布”公司,是波士顿高技术区最卓越的新兴企业之一。
Akamai公司向全球企业提供发送互联网内容,汇流媒体和应用程序的服务(目前,该公司为15个国家的企业管理着8000多台服务器)。
1998年,丹尼尔。
L和麻省理工学院的一些研究人员一起创立了这家公司,他在麻省理工学院的硕士论文构成了Akamai公司最初的”自由流”(Freeflow)技术的核心。
本教程重点在浏览器和代理缓存,尽管有些信息对网关缓存感兴趣的人也适用。
Web缓存无害吗?
为什么要鼓励缓存?
Web缓存是互联网中最容易被误解的技术之一。
网站管理员特别希望知道网站的一举一动,比方说多少人访问啦,访问时间啊什么的,而缓存会“隐藏”他们的用户,他们就无从得知到底谁访问了这个站点。
捡了芝麻丢西瓜,自认为放弃缓存可以精确跟踪用户,实际上,互联网中有太多的变数,想精确得到一张用户查看网站的图片?
没那么简单的,亲!
如果你很重视这个问题,恭喜你,本文正好提供了解决之道,即保证缓存友好,同时又能获得统计。
另外需要注意的是,缓存的内容都是旧的过时的。
因此,如何准确更新就成了一个问题。
不过不要担心,本文会向你展示如何配置服务器,让缓存就像你的女仆——随便调教。
CDN算是个挺有意思的技术,不同于代理缓存,CDN的网关缓存和被缓存的Web站点的利益是一致的,因此,上面提到的问题对于CDN而言是没有的。
不过,即使你使用了CDN,你仍要顾虑下游的代理和浏览器缓存。
以上为缓存可能的“糟粕”,那他好的地方呢?
缓存可以让你的Web站点加载更快,让你的服务器和互联网链接间负担更小。
这种差异会导致一些类似质的变化,一个网站要几秒钟才能加载出来,而另外一个充分发挥缓存的优势,几乎瞬间显示。
用户自然更喜欢那个加载迅速的站点,访问也更多。
再说个现实示例,许多大型互联网公司花费了数百万美元,在世界各地设立服务器集群来复制他们的内容,以使其尽可能快被他们的用户访问。
缓存为你做同样的事情,而且他们更接近最终用户。
最重要的是,你不要花银子。
实际上呢,无论你喜欢与否,代理和浏览器缓存都会被使用。
如果你站点的缓存配置不正确,你只能听天由命了。
Web缓存如何工作
所以的缓存都有一套自己的规则,可以用来决定何时跟缓存暧昧往来。
其中部分规则设定在协议中(HTTP1.0以及1.1),部分由缓存管理员⑤设置。
⑤缓存管理员:
如果指的是浏览器缓存,则有可能就是我们服务器专家同事,在服务器上配置一些缓存规则;如果是代理缓存,则指的就是处理代理服务器这块的管理人员。
一般而言有如下常用规则N:
1.响应头明确说明,偶不想被缓存,则不会被缓存;
2.如果请求信息是需要认证或者安全加密的(如,HTTPS),相应内容也不会被缓存;
3.缓存如果有以下表现,则认为是fresh新鲜的(无需检查源服务器,直接发送给客户端):
∙含有完整的过期时间和寿命控制头信息,并且内容仍在保鲜期内,或者
∙缓存最近已展现,并且在不久前修改。
则内容缓存直取,绕过源服务器。
4.若内容陈旧,则会要求源服务器做验证 validate ,或者告诉缓存其拷贝副本是否是OK的。
5.特定情况下——例如,断网了,之前有过的响应缓存直取而不检查源服务器。
响应如果没有类似ETag或Last-Modified头这样的校验器,也没有明确的更新信息,通常(并不绝对)认为是不可缓存的。
总而言之,新鲜度freshness和校验validation是确定缓存内容是否可用的最重要途径。
如果要展示的足够新,直接缓存取;如果检测发现展示内容并未变化,则不会再来一次完整的传输。
如何控制缓存和不缓存
有很多工具可以帮助设计师和网站管理员调整服务器缓存网站的方式,这也许需要你亲自动手对服务器的配置进行一些调整,但绝对值得。
了解如何使用这些工具请参考本文后面的章节。
HTMLMeta标签vs.HTTP头信息
HTML重构人员可以在文档的
中添加标签进行描述。这些meta标签通常用来标记不可缓存或过期时间。
Meta标签使用简单,但效果一般。
因为只被少数几个浏览器宠幸,而代理缓存基本上就不访问HTML文档。
尽管我们可以在页面上试图添加no-cache meta标签让页面一直是最新的,但其实没必要。
如果你的网站托管在ISP或者主机托管商那里,并且他们没有赋予您任意设置HTTP头信息的能力(比如Expires和Cache-Control),你要投诉争取,因为在你的工作中这些是必须的。
另外一方面:
HTTP头信息可以让你对浏览器和代理服务器如何处理你的副本进行更多的控制。
他们在HTML代码中是看不见的,一般由Web服务器自动生成。
但是,根据你使用的服务器,你可以在某种程度上进行控制。
在下文中:
你将看到一些有趣的HTTP头信息,以及如何在你的站点上应用部署这些特性。
HTTP头信息发送在HTML代码之前,只能被浏览器和一些中间缓存能看到,一个典型的HTTP1.1协议返回的头信息看上去像这样:
HTTP/1.1200OK
Date:
Fri,30Oct199813:
19:
41GMT
Server:
Apache/1.3.3(Unix)
Cache-Control:
max-age=3600,must-revalidate
Expires:
Fri,30Oct199814:
19:
41GMT
Last-Modified:
Mon,29Jun199802:
28:
12GMT
ETag:
"3e86-410-3596fbbc"
Content-Length:
1040
Content-Type:
text/html
头信息空一行后是HTML代码的输出,关于如何设置HTTP头信息请参考对应章节。
PragmaHTTP头信息(以及为什么不起作用)
很多人认为在HTTP头信息中设置了Pragma:
no-cache后会让内容无法被缓存。
但事实并非如此:
HTTP的规范中,响应型头信息没有任何关于Pragma属性的说明,只说明了请求头信息(浏览器发送给服务器的头信息)中的Pragma属性。
虽然有少部分缓存会买账,但大部分无视,使用Pragma没作用。
若要使用,试试下面的头信息。
使用ExpiresHTTP头信息控制不过期
ExpiresHTTP头是控制缓存的基本手段,Expires的中文意思是“有效期”,显然,就是告诉浏览器缓存的有效期。
如果过期,缓存会检查源服务器以确定文件是否改变了。
Expires头几乎每个缓存都支持。
大部分的服务器允许你以多种方式设置Expires响应头。
通常,他们允许设置一个绝对过期时间,然后对比最后一次访问的时候或者最后一次文档修改的时候决定客户端内容的获取方式
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- web