标签:创建 server 网络 高速缓存 属性 简单 isp art 安全加密
什么是缓存 Cache?
缓存位于客户端与服务器之间, 或者服务器与服务器之间。它决定是否保存所获资源的副本,以及如何使用副本,何时更新副本,这里所说的资源包括页面的HTML, 图片,文件等等。
使用缓存主要有2大理由:
缓存如何工作?
所有的缓存都遵循以下基本规则
总之:新鲜度和校验是确定内容是否可用的最重要途径。
其中一些规则在协议中有定义(HTTP协议1.0和1.1),另一些规则由缓存的管理员设置(浏览器的用户或者代理服务器的管理员);
缓存的控制一般在服务器端,少数在客户端。下面是在客户端控制的一个实例:
实例1:在客户端用HTML meta标签控制浏览器,要求浏览器不要cache这个页面:
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
以上设置是最少的、适合于各种主流浏览器的设置。 建议使用。
其中,
* Cache-Control里面的 no-cache是专门针对IE6的, 如果不需要支持IE6,就省略它。
* Pragma 里面的 no-cache是HTTP1.0专门针对旧clients的, 如果不需要支持HTTP1.0,就省略它
* Expires是专门针对HTTP1.0 client和proxies的, 如果不需要支持HTTP1.0,就省略它
如果以上3项都不支持,最后,就剩下: (不建议用此, 因为用户实际使用的浏览器版本很杂)
<meta http-equiv="Cache-Control" content="no-store, must-revalidate">
HTML META标签是写在HTML文件里面的, 使用很简单,但是效率并不高,因为只有几种浏览器会遵循这个标记(那些真正会“读懂”HTML的浏览器),没有一种缓存代理服务器能遵循这个规则(因为它们几乎完全不解析文档中HTML内容);有时会在Web页面中增加:Pragma: no-cache这个META标记,如果要让页面保持刷新,这个标签其实完全没有必要。
如果你的网站托管在ISP机房中,并且机房可能不给你权限去控制HTTP的头信息(如:Expires和Cache-Control);
在服务器端:
HTTP头信息,一般由Web服务器自动生成。但是,根据 你使用的服务,你可以在某种程度上进行控制。他们在HTML代码中是看不见的。HTTP头信息可以让你对浏览器和代理服务器如何处理你的副本进行更多的控制。
HTTP头信息发送在HTML代码之前,只有被浏览器和一些中间缓存能看到,一个典型的HTTP 1.1协议返回的头信息看上去像这样:
HTTP/1.1
200 OK
Date: Fri, 30 Oct 1998 13:19:41 GMT
Server: Apache/1.3.3 (Unix)
Cache-Control: max-age=3600, must-revalidate
Expires: Fri, 30 Oct 1998 14:19:41 GMT
Last-Modified: Mon, 29 Jun 1998 02:28:12 GMT
ETag: "3e86-410-3596fbbc"
Content-Length: 1040
Content-Type: text/html
HTTP 1.1定义的一组头信息属性:Cache-Control响应头信息,让网站的发布者可以更全面的控制他们的内容,并定位过期时间的限制。有用的 Cache-Control响应头信息包括:
校验是当副本已经修改后,服务器和缓存之间的通讯机制;使用这个机制:缓存服务器可以避免副本实际上仍然足够新的情况下重复下载整个原件。
* 如果没有任何信息说明保鲜期(Expires或Cache-Control),缓存将不会存储任何副本;
*当一份缓存包含Last-Modified信息(最后修改时间),他基于此信息,通过添加一个If-Modified-Since请求参数,向服务器查询:这个副本从上次查看后是否被修改了。
HTTP 1.1介绍了另外一个校验参数:
ETag,这是服务器生成的唯一标识符,每次副本的标签都会变化。由于服务器控制了ETag如何生成,缓存服务器可以通过If-None-Match请求的返回没变则当前副本和原件完全一致。
* 所有的缓存服务器都使用Last-Modified时间来确定副本是否够新,而ETag校验正变得越来越流行;
* 所有新一代的Web服务器都对静态内容(如:文件)自动生成ETag和Last-Modified头信息,而你不必做任何设置。
*服务器对于动态内容(例如:CGI,ASP或数据库生成的网站)并不知道如何生成这些信息;
创建利于缓存网站的窍门
除了使用新鲜度信息和校验,你还有很多方法使你的网站缓存友好。
编写利于缓存的脚本
脚本缺省不会返回校验参数(返回Last-Modified或ETag头信息)或其他新鲜度信息(Expires或Cache-Control),有些动态脚本的确是动态内容(每次相应内容都不一样),但是更多(搜索引擎,数据库引擎网站)网站还是能从缓存友好中获益的。
一般说来,如果脚本生成的输出在未来一段时间(几分钟或者几天)都是可重复复制的,那么就是可缓存的。如果脚本输出内容只随URL变化而变化,也是可缓存的;但如果输出会根据cookie,认证信息或者其他外部条件变化,则还是不可缓存的。
其他窍门:
More:
http://www.chedong.com/tech/cache_docs.html
https://www.mnot.net/cache_docs/
标签:创建 server 网络 高速缓存 属性 简单 isp art 安全加密
原文地址:http://www.cnblogs.com/GameEngine/p/6512645.html