- A+
之前在《高性能网站建设指南》中了解过ETag,但一直没有应用。昨晚看到百度站长平台在大力推荐ETag,忽然有一种凌凌漆接到国家任务的感觉。
1. 什么是ETag
ETag全称为Entity Tag,中文名为实体标签,是Web服务器和浏览器用于确认缓存组件有效性的一种机制。ETag是结合对象修改时间,对象大小,INode等特征的一个字符串,于HTTP1.1引入,相对于Last-Modified,提供了比最新修改日期更为灵活的机制。ETag目前主要应用于静态资源,比如图片,JS和CSS文件。
2. ETag原理
当用户发送HTTP请求时,浏览器会使用If-None-Match头将ETag值传回服务器,如果ETag匹配,则返回304状态码;否则返回200,并传输HTTP内容。简单示意图如下:
注:ETag最常用在静态资源上,比如图片,JS和CSS文件。据说网页上也可以使用ETag,但观察了几个大型网站都没有使用,尚不知道原因。
3. 遇到的问题和方法
3.1 集群带来的准确性问题
ETag的默认格式是inode-size-timestamp,这也意味着在集群中,即便对象大小,权限,时间戳,路径全都相同,inode和ETag也会不同。也就是说对于同样的组件,从集群的一台切换到另一台,ETag就会不同。如果集群中有10台服务器,ETag匹配的准确率只有10%。
3.2 解决方法
那有没有办法解决集群的问题?答案是有的,需要对ETag进行修改,建议去掉inode,使用size+timestamp,或只使用timestamp的方式。百度官方也给出了Apache等服务器下的具体修改方法。
3.3 计算带来的开支
只要有计算就会带来额外的成本,但从百度官方提供的测试数据来看,CPU利用率会提高1%~3%,吞吐率基本不变,尚能接受。
5. ETag对SEO的影响
ETag如果配置合理,会大幅增加sitemap的利用率。百度对每个站点的主动抓取有数量限制的,目前情况下,爬虫无法准确区分sitemap中哪些是新增加了网址的,哪些是未改变的,这就造成sitemap利用率较低。有可能爬虫每天抓的都是万年不更新的sitemap文件,而我们新加了网址的sitemap却一直未抓取。而如果使用了ETag,爬虫会直接略过未改变的,返回304的sitemap文件,直接抓取最近改变过的sitemap,这样就提高了sitemap的利用率。
据说sitemap权限以后会全面开放,因此ETag的应用无论是对站长还是百度都是很有帮助的。注:因ETag的配置暂未上线,还没有实战数据,之后会补充进来。
6. 参考资料
- 《高性能网站建设指南》
- 百度站长学院 - ETag简介与作用
- 百度站长学院 - 对站点服务器如何配置ETag
- 百度站长学院 - ETag对服务器性能的影响