网站通用CDN改造建议书Word文档下载推荐.docx
- 文档编号:20382014
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:8
- 大小:25.78KB
网站通用CDN改造建议书Word文档下载推荐.docx
《网站通用CDN改造建议书Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《网站通用CDN改造建议书Word文档下载推荐.docx(8页珍藏版)》请在冰豆网上搜索。
2.6内容分页、URL不变的情况8
2.7将访问频率高的从数据库获取的内容发布为静态页面9
2.8评论和原asp文件分开显示9
2.9避免使用重新定向9
2.10url参数部分避免使用中文字符和IP,url不可过长9
2.11对于受口令保护的页面,Cache设备如何处理10
2.12我将我的页面标记成了可缓存,可是我的浏览器的每次请求都穿过了Cache设备,如何能强制Cache保存内容副本?
10
1.面向Cache改造网站的通用建议
1.1Cache设备的一般工作原理
所有的Cache设备都有一套规则来确定何时向用户提供Cache中已有的可用内容。
有些规则通过http1.0\1.1规范设置,有些规则可以由管理员在Cache设备上设置。
一般而言,下面是一些应普遍遵循的规则:
1、如果响应Headers标明对象不可Cache,设备就不Cache;
2、如果响应Headers中没有过期验证的Header(如Etag或Last-Modified),Cache设备将认为此对象为不可Cache。
3、如果请求要经过用户认证或是保密内容,响应内容将不被Cache
4、被cache的内容如果符合一下条件之一,将被认为不过时,不需向源站检查,就可提供给请求客户:
●被Cache内容具有过期时间或其它控制有效期Header设置,且按此设置内容尚不过期;
●浏览器在设置成一次会话检查一次的情况下,在缓存中发现此副本。
●代理服务器中发现此副本,该副本已经有相当长的时间没有被修改过了。
5、如果副本过期,Cache设备会向源站确认内容是否可用,如果源站告诉Cache设备内容不可用,Cache设备从源站获取最新内容,否则将Cache设备内容提供给用户,同时延长Cache中副本的过期时间。
总之,通过副本“Freshness”确认,在该内容未改变的情况下,避免服务器再次发送全部内容,确保了访问客户能从Cache设备上立刻获得所需内容。
1.2控制设备的缓存动作
1.2.1使用HTMLMetaTags和HTTPHeaders
HTML文档作者可以在文档中放入metatags标明文档不可缓存,或在指定时间后过期。
Metatags容易使用但效率不高,因为它控制浏览器的缓存动作,而不能控制专用Cache设备的缓存动作。
HTTPheaders却可以让你同时控制浏览器和专用Cache设备的缓存动作,他们通常由Web服务器自动生成,不能在HTML页面中看到。
根据使用服务器的不同,你可以在不同程度上控制Headers。
HTTPheaders在HTML页面之前发送,只能被浏览器和中间层Cache设备看到。
典型的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:
Last-Modified:
Mon,29Jun199802:
28:
12GMT
ETag:
"
3e86-410-3596fbbc"
Content-Length:
1040
Content-Type:
text/html
1.2.2不起作用的PragmaHTTPHeaders
许多人认为指定一个pragma值为“nocache”可以使内容不被cache,这种说法并不正确,HTTP规范没有对Pragma响应header做出任何规定。
相反只讨论了pragma请求header。
虽然可能有少数Cache设备支持这个响应header,但大部分不支持,所以设置它不起作用
在蓝汛公司使用的cache设备中加入filter,可以对“pragma:
nocache”页面强行cache。
1.2.3使用ExpiresHTTPHeader控制内容更新
ExpiresHTTPheader是一种控制Cache设备的基本方式,它告诉设备某一副本在多长的时间内不过期,在此之后,设备将回源站检查页面是否被更新过。
事实上,所有的Cache设备都支持Expiresheader。
大多数Web服务器允许通过几种方式设置Expires响应Header。
服务器通常允许你为页面设置一个绝对过期时间。
Expiresheader对控制静态图片的缓存动作尤其有效,因为他们不经常变化,站点对用户响应速度肯定会比较快。
它对控制有规律改变的页面也很有效,比如你每天早上6点更新页面,你就可以设定副本在早上6点过期,Cache设备就知道何时去源站获取新的内容,而不用用户作任何操作。
Expiresheader的唯一值就是一个HTTP日期;
任何其他值都会被按过时理解,造成内容不可缓存。
还要注意,HTTPdate是GMT(GreenwichMeanTime)时间,而不是本地时间。
格式:
如果你使用Expiresheader,就必须确保服务器时钟准确。
方法之一是使用NTP(NetworkTimeProtocol),找本地系统管理员确定可以使用哪些NTPServer。
使用Expiresheader要注意确保Web服务器和Cache设备的时间一致,否则就可能出现Cache设备把过时内容提供给用户的结果。
最后一点,记住在页面过期之前为页面指定新的过期时间,否则所有的用户请求都要回源站验证,增加源站的负载和延迟。
1.2.4Cache-ControlHTTPheaders
HTTP1.0缺乏对cache设备缓存动作的控制方法,HTTP1.1引入了一种新的headers:
Cache-Controlresponseheaders,web发行系统可以通过它解决页面过期问题,实现对页面内容的更多地控制
可用的Cache-Controlresponseheaders包括:
●max-age=[seconds]:
指定内容被请求后的最大不过期时间,与请求时间相关,而不是指定一个绝对时间。
●s-maxage=[seconds]:
与max-age类似,只应用于共享caches(Squid软Cache)
●public:
标明需要认证的响应内容可缓存。
因为通常情况下,如果HTTP需要认证,响应内容自动默认不可cache。
●private:
指出该Object不可被cache
●no-cache:
强制cache设备在每次向用户提供可用内容前向源站进行认证,这样可以确保只响应通过认证的请求,也适合一些刷新要求很严格的站点。
●no-store:
指示Cache在任何条件下都不能保存副本。
●must-revalidate:
HTTP允许Cache设备在某些特殊条件下向用户提供过时的内容,如果使用了此header,就表示服务器必须严格执行Web服务器的过期指定。
●proxy-revalidate:
和must-revalidate类似,只适用于代理服务器Cache。
使用Cache-controlheaders前,应该看看HTTP1.1规范及相关参考资料。
HTTP-1.1的链接:
http:
//www.w3.org/Protocols/rfc2616/rfc2616.html
1.2.5认证条件和认证
Web服务器和Cache通过认证确保Server中的改版能在Cache中及时反映出来,它可以使Cache避免重新下载副本,但不保证内容不过期。
认证条件比如Expires或Cache-control,如果没有他们,Cache就无从对副本进行认证。
最通用的认证就是HTML文档的修改时间,使用“last-Modified”header表示。
Cache可以向服务器发送“If-Modified-Since”请求,确认文档是否有所改变。
HTTP1.1还引入了一个新的认证条件:
Etag。
它是在文档产生或修改的时候由服务器生成的针对该文档的唯一识别码,Cache设备可以向服务器发送“If-None-Match”请求确认文档是否改变。
大部分Cache设备使用Last-Modified进行内容刷新;
Etag认证由于其简单,也越来越被广泛使用。
还有人认为Expiresheader可以在Cache本地完成,效率更高。
大部分的Web服务器为静态内容自动生成Etag和Last-Modified认证条件,但无法为动态内容(像CGI,ASP或数据库站点)生成认证条件,需要通过写脚本实现。
1.3建造Cache易于识别的Web站点
除了使用刷新信息和认证外,还有其他一些手段可以使站点对Cache设备更加友好
∙站点内容和URL严格一一对应:
这是站点面向Cache的第一要则。
如果你在不同的页面、不同的用户和不同的站点中使用同一个对象,这个对象要使用唯一的URL。
这是最简单同时也是对Cache设备最有效的一种方式。
∙使用通用的图片库:
可以很方便地从站点的不同位置引用。
∙让Cache存储不经常变化的图片和页面内容:
可以通过给Cache-Control:
max-ageheader设置一个很大的值实现
∙让Cache能识别有规律地更新的页面:
指定一个适当的max-ageorexpires值.
∙如果内容发生变化(尤其象下载文件),改变文件名:
使用这种方式,可以给新文件指定一个非常大的过期时间,确保用户能得到正确地版本,但指向此文件的链接需要设置一个较短的过期时间。
∙除非必要,不对文件更新:
更新文件会使它得到一个新的“Last-Modified”值。
比如每次做整个站点的更新就不如只更新你改变了的文件。
∙除非必要,不用Cookies:
cookies不易缓存,并且在大多数情况下不需缓存,如果必须使用Cookies,也请仅限于动态页面。
∙尽量少用SSL:
加密页面无法被共享Cache缓存,如果必须使用,也要在页面上谨慎使用图片。
∙使用标准的文件后缀:
尽量使用标准的文件后缀,易于设备识别,例如:
jpg、gif、html等等,而且注意尽量为小写。
1.4写cache易于识别的脚本
默认条件下,大部分脚本不会向客户端返回认证条件(e.g.,aLast-ModifiedorEtagHTTPheader)或者刷新信息(ExpiresorCache-Control)。
但是也确实有些真正动态的脚本,实现对每个请求的不同响应,Cache设备、搜索引擎和数据库驱动的站点等都可以从此受益。
一般而言,如果当时和随后的请求能让脚本生成同样的输出,那么该内容一般是适合cache的。
如果执行脚本的输出依赖于cookie、认证信息或其他外部条件,它就有可能不可cache。
1、写出cache可识别的脚本(同时也是高性能的)的最好方式,就是无论脚本如何变化,都要把它导入一个普通文件,以便Web服务器能对它象普通页面一样生成和使用认证条件。
记住每次只更新修改过的文件,以免改动了其他文件的Last-Modified值。
2、让脚本在一种受限制的形式下可以被缓存的另一种方式,是设置一种与age相关的header。
尽管这可以通过设置Expires实现,不过使用Cache-Control:
max-age来实现可能最容易。
这使得内容在被请求后的一段时间内不过期。
3、如果无法采用上述两种方式,那就必须写生成认证条件的脚本,来响应If-Modified-Since和/或If-None-Match请求。
服务器可以解析HTTPheaders然后以304(NotModified)响应用户请求。
不过,这样做工作量可不小。
4、其他要点:
●不用POST:
大多数设备不能缓存响应POST请求的内容。
除非必须,要避免使用post请求。
如果你采用get方式发送请求,cache设备则可以把这些信息存储起来。
●不在url中嵌入用户信息:
除非服务器生成的内容对那个用户是唯一的。
●不要指望所有的用户请求都通过同一台Cache设备到达服务器:
因为cache通常一起工作的;
●生成Content-Length响应headers:
它很容易实现,并且允许你的响应脚本在常连接中使用。
这种方式允许HTTP1.0客户端使用TCP/IP连接一次,然后请求多个内容,不必为每个请求都建立一个连接,从而使网站响应速度更快。
2.其它CDN加速相关问题
2.1图片加速优先
确定最受欢迎和访问时下载量最大(尤其是图片)的内容,并优先从这里开始网站改造。
2.2分离不同性质的域名
用户根据网站不同的栏目,使用不同的域名,按内容和外观的分离的原则,在页面制作中对不同性质的任务区分处理,方便对内容管理和更新,比如将用户交互的内容和静态图片、页面使用不同的频道存放。
比如将搜索、用户注册和管理、交易流程、客户反馈等网站动态内容与可以使用CDN网络加速的内容区分开来。
2.3用户登录后个性化信息的改造
频道下用户登录后的个性化内容如“欢迎您,***”,不适合加速,这部分内容可以选择如下之一的方式进行改造。
方式一:
用户验证与页面显示分别由不同的文件处理。
方式二:
用户个性信息由脚本解释语言在客户端验证。
2.4加速后如何获取页面访问量统计结果
如果一个页面每一次被访问你都必须知道,你可以选择在页面上放置一个1x1的透明对象,让它代表这个页面,使用相应的Header将其设置为不可缓存,源站由此可知用户对此页面的每一次访问。
但这种方式对Cache设备不友好,也不会非常准确,还在网上产生了不必要的流量,同时迫使用户等待这个无法缓存的对象下载到本地。
使用蓝汛公司的CDN服务,蓝汛公司可以按网站方要求提供客户访问日志。
2.5内容刷新
●TTL刷新方式:
指定加速对象多长时间刷新一次;
到了这个时间,加速设备会去源站检查当前设备中的副本是否已经过期,如果过期,就从源站取一份最新的给用户。
●临时性强制刷新方式:
用户将需要更新的某个栏目下的流媒体文件列表传给我们公司的运维部门,我们的工作人员帮助完成最新内容在CDN网络中的分发
2.6内容分页、URL不变的情况
有两种选择:
1、将所有内容放入一个页面;
2、仍然维持分页显示,但是要在URL中使用不同的参数表示不同的页面,也就是每份内容要对应一个唯一的URL。
2.7将访问频率高的从数据库获取的内容发布为静态页面
当当网主要使用asp技术实现,可以考虑把部分访问频率高的、重要的内容发布为静态页面。
如果无法全部用静态网页实现,应采取静动结合的方法来解决。
静动结合,有两方面的含义:
一方面是指,对于一些重要的、而且内容相对固定的网页制作为静态网页,如包含有丰富关键词的网站介绍、用户帮助、网站地图等;
另一方面,可以将动态实现的网页通过一定的技术,在发布出来之后转化为静态网页,这种方式尤其适合于发布后内容无需不断更新的网页(如新闻等)。
2.8评论和原asp文件分开显示
对于“内容+评论”的页面,建议评论部分既要能连接到内容,又要和内容分开存放,以便于Cache设备按不同的请求对象处理。
2.9避免使用重新定向
在对当当网网站分析的过程中,尚未发现使用多个文件名标志同样内容的页面或文件。
如果有请尽量避免,因为这将增加延迟,影响用户访问体验,更重要的,它还可能给用户使用CDN服务后的内容刷新和同步工作带来一些混乱。
2.10url参数部分避免使用中文字符和IP,url不可过长
鉴于存在部分cache设备可能不支持URL中带汉字的参数,建议URL的参数部分避免使用汉字。
在URL中使用IP也是必须要避免的。
另外,如果url过长,也可能会有部分cache设备不支持,所以url参数不可滥用,带参数的url一般不要超过256个字符。
2.11对于受口令保护的页面,Cache设备如何处理
一般情况下,受口令保护的页面的“Cache-Control”Header的值也是“private”,这些页面将不被缓存,不过,你可以在HTTP1.1中将其设置为“public”,以允许Cache设备对其缓存。
如果你既希望这些页面可以被缓存,也需要对每一位访问用户进行验证,你可以将页面的“Cache-Control”Header设置成“public,no-cache”。
不管如何处理,最好还是减少用户认证的使用,比如,如果你的图片信息不敏感,就将它们放在一个单独的目录下,并设置服务器不对其进行认证。
这种情况下,那些图片默认是可缓存的。
Cache设备不需要强制保留副本以便可以重用,他们只需要确定在哪些条件下不保留副本。
Cache设备都是基于副本的大小、类型或者Cache设备自己的剩余存储空间来决定哪些副本将被保留。
和其他更受欢迎或更大的内容比较起来,你的内容可能被Cache设备判断为不值得长久保存。
一些设备确实允许管理员设置副本的保存优先级,还有一些允许设定副本为永久保存,永不过时,这样的内容对用户就是一直可用的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网站 通用 CDN 改造 建议书