您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 面向站长和网站管理员的Web缓存加速指南
面向站长和网站管理员的Web缓存加速指南原文(英文)地址:版权声明:署名-非商业性使用-禁止演绎2.0这是一篇知识性的文档,主要目的是为了让Web缓存相关概念更容易被开发者理解并应用于实际的应用环境中。为了简要起见,某些实现方面的细节被简化或省略了。如果你更关心细节实现则完全不必耐心看完本文,后面参考文档和更多深入阅读部分可能是你更需要的内容。1.什么是Web缓存,为什么要使用它?2.缓存的类型:1.浏览器缓存;2.代理服务器缓存;3.Web缓存无害吗?为什么要鼓励缓存?4.Web缓存如何工作:5.如何控制(控制不)缓存:1.HTMLMeta标签vs.HTTP头信息;2.PragmaHTTP头信息(为什么不起作用);3.使用Expires(过期时间)HTTP头信息控制保鲜期;4.Cache-Control(缓存控制)HTTP头信息;5.校验参数和校验;6.创建利于缓存网站的窍门;7.编写利于缓存的脚本;8.常见问题解答;9.缓存机制的实现:Web服务器端配置;10.缓存机制的实现:服务器端脚本;11.参考文档和深入阅读;12.关于本文档;什么是Web缓存,为什么要使用它?Web缓存位于Web服务器之间(1个或多个,内容源服务器)和客户端之间(1个或多个):缓存会根据进来的请求保存输出内容的副本,例如html页面,图片,文件(统称为副本),然后,当下一个请求来到的时候:如果是相同的URL,缓存直接使用副本响应访问请求,而不是向源服务器再次发送请求。使用缓存主要有2大理由:减少相应延迟:因为请求从缓存服务器(离客户端更近)而不是源服务器被相应,这个过程耗时更少,让web服务器看上去相应更快;减少网络带宽消耗:当副本被重用时会减低客户端的带宽消耗;客户可以节省带宽费用,控制带宽的需求的增长并更易于管理。缓存的类型浏览器缓存对于新一代的Web浏览器来说(例如:IE,Firefox):一般都能在设置对话框中发现关于缓存的设置,通过在你的电脑上僻处一块硬盘空间用于存储你已经看过的网站的副本。浏览器缓存根据非常简单的规则进行工作:在同一个会话过程中(在当前浏览器没有被关闭之前)会检查一次并确定缓存的副本足够新。这个缓存对于用户点击“后退”或者点击刚访问过的链接特别有用,如果你浏览过程中访问到同一个图片,这些图片可以从浏览器缓存中调出而即时显现。代理服务器缓存Web代理服务器使用同样的缓存原理,只是规模更大。代理服务器群为成百上千用户服务使用同样的机制;大公司和ISP经常在他们的防火墙上架设代理缓存或者单独的缓存设备;由于带路服务器缓存并非客户端或者源服务器的一部分,而是位于原网络之外,请求必须路由到他们才能起作用。一个方法是手工设置你的浏览器:告诉浏览器使用那个代理,另外一个是通过中间服务器:这个中间服务器处理所有的web请求,并将请求转发到后台网络,而用户不必配置代理,甚至不必知道代理的存在;代理服务器缓存:是一个共享缓存,不只为一个用户服务,经常为大量用户使用,因此在减少相应时间和带宽使用方面很有效:因为同一个副本会被重用多次。网关缓存也被称为反向代理缓存或间接代理缓存,网关缓存也是一个中间服务器,和内网管理员部署缓存用于节省带宽不同:网关缓存一般是网站管理员自己部署:让他们的网站更容易扩展并获得更好的性能;请求有几种方法被路由到网关缓存服务器上:其中典型的是让用一台或多台负载均衡服务器从客户端看上去是源服务器;网络内容发布商(ContentdeliverynetworksCDNs)分布网关缓存到整个(或部分)互联网上,并出售缓存服务给需要的网站,Speedera和Akamai就是典型的网络内容发布商(下文简称CDN)。本问主要关注于浏览器和代理缓存,当然,有些信息对于网关缓存也同样有效;Web缓存无害吗?为什么要鼓励缓存?Web缓存在互联网上最容易被误解的技术之一:网站管理员经常怕对网站失去控制,由于代理缓存会“隐藏”他们的用户,让他们感觉难以监控谁在使用他们的网站。不幸的是:就算不考虑Web缓存,互联网上也有很多网站使用非常多的参数以便管理员精确地跟踪用户如何使用他们的网站;如果这类问题也是你关心的,本文将告诉你如何获得精确的统计而不必将网站设计的非常缓存不友好。另外一个抱怨是缓存会给用户过期或失效的数据;无论如何:本文可以告诉你怎样配置你的服务器来控制你的内容将被如何缓存。CDN是另外一个有趣的方向,和其他代理缓存不同:CDN的网关缓存为希望被缓存的网站服务,没有以上顾虑。即使你使用了CDN,你也要考虑后续的代理服务器缓存和浏览器缓存问题。另外一方面:如果良好地规划了你的网站,缓存会有助于网站服务更快,并节省服务器负载和互联网的链接请求。这个改善是显著的:一个难以缓存的网站可能需要几秒去载入页面,而对比有缓存的网站页面几乎是即时显现:用户更喜欢速度快的网站并更经常的访问;这样想:很多大型互联网公司为全世界服务器群投入上百万资金,为的就是让用户访问尽可能快,客户端缓存也是这个目的,只不过更靠近用户一端,而且最好的一点是你甚至根本不用为此付费。事实上,无论你是否喜欢,代理服务器和浏览器都回启用缓存。如果你没有配置网站正确的缓存,他们会按照缺省或者缓存管理员的策略进行缓存。缓存如何工作所有的缓存都用一套规则来帮助他们决定什么时候使用缓存中的副本提供服务(假设有副本可用的情况下);一些规则在协议中有定义(HTTP协议1.0和1.1),一些规则由缓存的管理员设置(浏览器的用户或者代理服务器的管理员);一般说来:遵循以下基本的规则(不必担心,你不必知道所有的细节,细节将随后说明)1.如果响应头信息:告诉缓存器不要保留缓存,缓存器就不会缓存相应内容;2.如果请求信息是需要认证或者安全加密的,相应内容也不会被缓存;3.如果在回应中不存在校验器(ETag或者Last-Modified头信息),缓存服务器会认为缺乏直接的更新度信息,内容将会被认为不可缓存。4.一个缓存的副本如果含有以下信息:内容将会被认为是足够新的1.含有完整的过期时间和寿命控制头信息,并且内容仍在保鲜期内;2.浏览器已经使用过缓存副本,并且在一个会话中已经检查过内容的新鲜度;3.缓存代理服务器近期内已经使用过缓存副本,并且内容的最后更新时间在上次使用期之前;4.够新的副本将直接从缓存中送出,而不会向源服务器发送请求;5.如果缓存的副本已经太旧了,缓存服务器将向源服务器发出请求校验请求,用于确定是否可以继续使用当前拷贝继续服务;总之:新鲜度和校验是确定内容是否可用的最重要途径:如果副本足够新,从缓存中提取就立刻能用了;而经缓存器校验后发现副本的原件没有变化,系统也会避免将副本内容从源服务器整个重新传输一遍。如何控制(控制不)缓存有很多工具可以帮助设计师和网站管理员调整缓存服务器对待网站的方式,这也许需要你亲自下手对服务器的配置进行一些调整,但绝对值得;了解如何使用这些工具请参考后面的实现章节;HTMLmeta标签和HTTP头信息HTML的编写者会在文档的HEAD区域中加入描述文档的各种属性,这些META标签常常被用于标记文档不可以被缓存或者标记多长时间后过期;META标签使用很简单:但是效率并不高,因为只有几种浏览器会遵循这个标记(那些真正会“读懂”HTML的浏览器),没有一种缓存代理服务器能遵循这个规则(因为它们几乎完全不解析文档中HTML内容);有事会在Web页面中增加:Pragma:no-cache这个META标记,如果要让页面保持刷新,这个标签其实完全没有必要。如果你的网站托管在ISP机房中,并且机房可能不给你权限去控制HTTP的头信息(如:Expires和Cache-Control),大声控诉:这些机制对于你的工作来说是必须的;另外一方面:HTTP头信息可以让你对浏览器和代理服务器如何处理你的副本进行更多的控制。他们在HTML代码中是看不见的,一般由Web服务器自动生成。但是,根据你使用的服务,你可以在某种程度上进行控制。在下文中:你将看到一些有趣的HTTP头信息,和如何在你的站点上应用部署这些特性。HTTP头信息发送在HTML代码之前,只有被浏览器和一些中间缓存能看到,一个典型的HTTP1.1协议返回的头信息看上去像这样:HTTP/1.1200OKDate:Fri,30Oct199813:19:41GMTServer:Apache/1.3.3(Unix)Cache-Control:max-age=3600,must-revalidateExpires:Fri,30Oct199814:19:41GMTLast-Modified:Mon,29Jun199802:28:12GMTETag:3e86-410-3596fbbcContent-Length:1040Content-Type:text/html在头信息空一行后是HTML代码的输出,关于如何设置HTTP头信息请参考实现章节;PragmaHTTP头信息(为什么它不起作用)很多人认为在HTTP头信息中设置了Pragma:no-cache后会让内容无法被缓存。但事实并非如此:HTTP的规范中,响应型头信息没有任何关于Pragma属性的说明,而讨论了的是请求型头信息Pragma属性(头信息也由浏览器发送给服务器),虽然少数集中缓存服务器会遵循这个头信息,但大部分不会。用了Pragma也不起什么作用,要用就使用下列头信息:使用Expires(过期时间)HTTP头信息来控制保鲜期Expires(过期时间)属性是HTTP控制缓存的基本手段,这个属性告诉缓存器:相关副本在多长时间内是新鲜的。过了这个时间,缓存器就会向源服务器发送请求,检查文档是否被修改。几乎所有的缓存服务器都支持Expires(过期时间)属性;大部分Web服务器支持你用几种方式设置Expires属性;一般的:可以设计一个绝对时间间隔:基于客户最后查看副本的时间(最后访问时间)或者根据服务器上文档最后被修改的时间;Expires头信息:对于设置静态图片文件(例如导航栏和图片按钮)可缓存特别有用;因为这些图片修改很少,你可以给它们设置一个特别长的过期时间,这会使你的网站对用户变得相应非常快;他们对于控制有规律改变的网页也很有用,例如:你每天早上6点更新新闻页,你可以设置副本的过期时间也是这个时间,这样缓存服务器就知道什么时候去取一个更新版本,而不必让用户去按浏览器的“刷新”按钮。过期时间头信息属性值只能是HTTP格式的日期时间,其他的都会被解析成当前时间“之前”,副本会过期,记住:HTTP的日期时间必须是格林威治时间(GMT),而不是本地时间。举例:Expires:Fri,30Oct199814:19:41GMT所以使用过期时间属性一定要确认你的Web服务器时间设置正确,一个途径是通过网络时间同步协议(NetworkTimeProtocolNTP),和你的系统管理员那里你可以了解更多细节。虽然过期时间属性非常有用,但是它还是有些局限,首先:是牵扯到了日期,这样Web服务器的时间和缓存服务器的时间必须是同步的,如果有些不同步,要么是应该缓存的内容提前过期了,要么是过期结果没及时更新。还有一个过期时间设置的问题也不容忽视:如果你设置的过期时间是一个固定的时间,如果你返回内容的时候又没有连带更新下次过期的时间,那么之后所有访问请求都会被发送给源Web服务器,反而增加了负载和响应时间;Cache-Control(缓存控制)HTTP头信息HTTP1.1介绍了另外一组头信息属性:Cache-Control响应头信息,让网站的发布者可以更全面的控制他们的内容,并定位过期时间的限制。有用的Cache-Control响应头信息包括:max-age=[秒]—执行缓存被认为是最新的最长时间。类似于过期时间,这个参数是基于请求时间的相对时间间隔,而不是绝对过期时间,[秒]是一个数字,单位是秒:从请求时间开始到过期时间之间的秒数。s-maxage=[秒]—类似于max-age属性,除了他应用于共享(如:代理服
本文标题:面向站长和网站管理员的Web缓存加速指南
链接地址:https://www.777doc.com/doc-3579798 .html