配置ETags–网站速度优化技巧法则13 – [网站速度优化]
By admin
- One minute read - 79 words法则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-Match传回ETag给原Web 服务器,若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是不匹配的。默认情况下,在多服务器情形下,APACHE与IIS嵌入的Etag验证测试成功都显著减少。
Apache1.32.x的Etag格式是inode-si ze-timestamp,尽管同一文件存放在多个服务器的相同路径下、具有相 同大小,权限,时间戳等,但一台服务器的inode与另一台是不同的。
IIS 5.0和6.0的Etag存在类似问题,其格式是 Filetimestamp:ChangeNumber。ChangeNumber是用于跟踪IIS配置改变的一个计数值,每一个网站的IIS服务器的ChangeNumber都不尽相同。
最终对于同一个元素,Apache与IIS产生的Etag,在不同的web 服务器上,都不一样。由于ETag不同,用户不会接收到小的、快速的304响应,相反,他们将收到一个正常的200响应,来提收全部的元素。若网站只有一台服务器,这不是问题,但若由 多台服务器提供服务,且使用APACHE或IIS默认的Etag配置,用户访问将比较慢,服务器不堪重负,消耗更多的带宽,而且代理也不能有效缓存网站内容。即使元素有一个超长期的Expires头,用户重新刷新时,仍会制造带条件的GET请求。
因此,若不需要用到ETags系统提供的灵活的验证机制,最好删除ETag。Last-Modified头提供了基于元素时间戳的验证,何况删除ETag会减少http response及后续请求的HTTP头的大小。微软支持文章描述了如何删除ETags,而在 Apache下,只要在配置文件中设置FileETag none即可。
在httpd.conf文件最后添加一行:
FileETag none
重启apache服务即可。
参考: http://www.51docs.net/ApacheMenu_zh_CN/mod/core.html