配置ETags–网站速度优化技巧法则13 – [网站速度优化]

法则13 配置ETags

实体标签(ETags是用于确定浏览器缓存中元素 与Web 服务器中的元素是否相匹配的机制(实体是“元素”的另外一个称谓:如图片、脚本、样式 表等),它提供 了last-modified 时间灵活的元素验证机制。每一个ETag,都唯一的字符串,用于标识特定版本的元素,它需被包括在引号中。Web 服务器在响应信息头中用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-MatchETagWeb 服务器ETag匹配,则服务器返回304代码而不是上例中的12195字节,从而节省了下载响应时间

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的问题在于它们是基于服务器唯一性的某些属性构造的。而当今大部分网站都是使用服务器集群来处理请求,当浏览器先从原服务器1请求某元素,后来向另一服务器2验证该元素,这样Etag是不匹配的。默认情况下,在多服务器情形下,APACHEIIS嵌入的Etag验证测试成功都显著减少。

Apache1.32.xEtag格式是inode-si ze-timestamp,尽管同一文件存放在多个服务器的相同路径下、具有相 同大小,权限,时间戳等,但一台服务器的inode与另一台是不同的。

IIS 5.06.0Etag存在类似问题,其格式是 Filetimestamp:ChangeNumberChangeNumber是用于跟踪IIS配置改变的一个计数值,每一个网站的IIS服务器的ChangeNumber都不尽相同。

最终对于同一个元素ApacheIIS产生的Etag在不同的web 服务器上,不一样。由于ETag不同,用户不会接收到小的、快速的304响应,相反,他们将收到一个正常的200响应,来提收全部的元素。若网站只有一台服务器,这不是问题,但若由 多台服务器提供服务,且使用APACHEIIS默认的Etag配置,用户访问将比较慢,服务器不堪重负,消耗更多的带宽,而且代理也不能有效缓存网站内容。即使元素有一个超长期的Expires头,用户重新刷新时,仍会制造带条件的GET请求。

因此,若不需要用到ETags系统提供的灵活的验证机制,最好删除ETagLast-Modified头提供了基于元素时间戳的验证,何况删除ETag会减少http response及后续请求的HTTP头的大小。微软支持文章描述了如何删除ETags,而在 Apache下,只要在配置文件中设置FileETag none即可。

在httpd.conf文件最后添加一行:

FileETag none

重启apache服务即可。

参考:http://www.51docs.net/ApacheMenu_zh_CN/mod/core.html