Nexus Weblogging
ChinaonRails
You are here ChinaonRails > 架构 > > 最新的Edge Rails里用etags提高性能

bd7lx


58.189%

disconnected
登录后回复主题 | 跳到回复

最新的Edge Rails里用etags提高性能

... by bd7lx ... 3 月 21 天前 ... 131 次点击

http://www.tbray.org/ongoing/When/200x/2008/08/14/Rails-ETags

http://ryandaigle.com/articles/2008/8/14/what-s-new-in-edge-rails-simpler-conditional-get-support-etags

什么是“ETag”?

HTTP协议规格说明定义ETag为“被请求变量的实体值”

(参见 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html —— 章节 14.19)。

另一种说法是,ETag是一个可以与Web资源关联的记号(token)。典型的Web资源可以一个Web页,但也可能
是JSON或XML文档。

服务器单独负责判断记号是什么及其含义,并在

HTTP响应头

中将其传送到客户端。


http://www.infoq.com/cn/articles/etags
使用ETags减少Web应用带宽和负载

ETags(Entity tags)是服务器和浏览器的一个功能,它用来判断浏览器缓存里的元素是否和原来服务器上的一致。ETags比last-modified date更具有弹性,它用一个独一无二的字符串来标识一个元素的版本。
源服务器用响应头里的ETag来特定一个元素的ETag:
HTTP/1.1 200 OK
Last-Modified: Tue, 12 Dec 2006 03:03:59 GMT
ETag: "10c24bc-4ab-457e1c1f"
Content-Length: 12195
之后,如果浏览器要验证这个元素,它就会用If-None-Match头来回传ETag到源服务器。如果符合的话,一个304状态的代码就会从源服务器返回到浏览器,这样源服务器就节省了传输具体数据的开销。
GET /i/yahoo.gif HTTP/1.1
Host: us.yimg.com
If-Modified-Since: Tue, 12 Dec 2006 03:03:59 GMT
If-None-Match: "10c24bc-4ab-457e1c1f" 网页教学网
HTTP/1.1 304 Not Modified

用Etags的问题就在于它会标识那个特定的服务器,如果换了服务器,Etags也就失去了原有的功能,但是这种现在在网络上太常见了,因为我们经常用服务器集群。默认情况下,Apache和IIS会在Etag中内嵌数据,这样会动态减少验证成功的机会。

Apache1.3和2.x的ETag格式是inode-size-timestamp。虽然一个文件可能在不同服务器的同一个目录,同样的大小,安全级,时间戳等等,它的inode会随着服务器的不同而不同。

IIS5.0和6.0有同样类似Etags的东西,叫时间戳:ChangeNumber(更改号),更改号是一个用来追踪IIS配置变化的计数器,ChangeNumber在不同IIS服务器之间是不一样的。 Webjx.Com

它最终的问题就是,IIS和Apache产生的Etags会在不同服务器之间无法匹配,这样我们的浏览器就无法得到我们期待的304响应,而给我们的是一个普通的200响应,和正常的数据流。如果你的网站只有一个服务器还无所谓,如果是集群,而你用的是默认的ETag配置,你的用户就会获得更慢的页面,你的服务器也会有更高的负载,消耗更大的带宽资源,代理也无法高效缓存你的内容,甚至即使你有一个长时间过期的头部(按:见第三条规则),也不会阻止它重新载入内容。

如果你不想发挥Etags提供的这个弹性验证模型的优势,你最好关掉它。Apache中关掉它的方法是在Apache的配置文件中写这么一句:
FileETag none

http://www.webjx.com/web/xinde/20080306/xinde_jiqiao_4686.html

也有人对etag使用持不同看法
http://morganchengmo.spaces.live.com/blog/cns!9950CE918939932E!2132.entry


目前这个主题还没有回复,或许你可以帮楼主加盖一层?

在回复之前你需要先进行登录
电子邮件或昵称
密码
© 2007 A Jesse Cai Production   -   About   -   京ICP备07020911号
a site powered by Project Babel