《高性能网站建设指南》阅读笔记_规则13- 配置ETag

来源:互联网 发布:信息系统数据质量监控 编辑:程序博客网 时间:2024/05/16 06:39

ETag:实体标签,是web服务器和浏览器用于确认缓存组件的有效性的一种机制。是唯一标识了一个组件的一个特定版本的字符串.IIS上的ETag格式是FiletimestampChangeNumber即;时间戳和跟踪IIS配置变化的计数器组成的字符串。

工作机制

前面提到过,检测组件是否有效时,是通过Web服务器与客户端缓存的组件进行匹配的。有两种方式:

--比较最新修改日期

原始服务器通过的Last-Modified响应头来返回组建的最新修改日期,浏览器通过If-Modefied-since进行比较判断,如果匹配则返回304not Modefied),避免了200请求

-- 比较ETag实体标签

服务器传递客户端组件一个ETag,如:

服务器发送ETag:"10c24bc-4ab-457e1c1f"

此后,如果浏览器验证该组件,则会使用If-None-Match头将ETag传回原始服务器,如:

浏览器发送If-None-Match:"10c24bc-4ab-457e1c1f"

如果相同,则服务器返回304 Not Modified

如果不相同,则服务器重新向浏览器发送该组件。                           

如果一个网站有多台服务器,那么,对于完全相同的组件,从一台服务器到另一台服务器,IIS产生的ETag是不会匹配的。就是说如果有10台服务器,用户得到正确304响应的几率只有10%,其余的90%都会得到200响应并下载所有的数据,

需要注意的是:ETag的服务器返回(If-None-Match)比最新修改日期的返回(If-Modified-Since)具有更高的优先级。如果同时存在,则会禁止返回304 Not Modified

建议:

ETag只用在单个服务器的网站上,在多服务器的网站上,可以修改ETag格式(如:IIS中实现从ETag中移除ChangeNumber,只留时间戳),但这样和Last-Modified头是等效的。所以最好将ETag完全移除,已避免组件的重复下载。

如何在IIS中移除ETag,参考:

http://support.microsoft.com/?id=922733

http://support.microsoft.com/?id=922703

原创粉丝点击