何时使用和不使用ETag


9

我只是在WebPageTest.org浏览我们的网站,他们关于加快网站访问速度的建议之一是:

除非您有明确的理由需要使用ETag标头,否则通常不应使用

我想知道这意味着什么。这是否意味着您将不会更改的静态内容不应该包含它们,或者这意味着您将要定期更改的内容不应该具有它们,或者它意味着除非您拥有固定的内容,否则通常不应该使用它们具体需求。

如果是后者,那么什么时候才是合适的时间使用它们?谢谢你的帮助。

Answers:


8

ETag是“上次修改时间”的替代方法(但可以与“上次修改时间”结合使用),以确定缓存验证。

客户端可以基于ETag发送前提条件,例如if-matchs或if-none-matches。您不仅可以使用GET请求(这就是webpagetest.org所做的),还可以使用“机会更新”,这样PUT请求就具有前提条件,并且如果自从ETag以来已更新资源,则将不执行更新操作。最后获得。

简而言之:您在CMS的页面上单击“编辑”,您的朋友在CMS的页面上单击“编辑”,您的朋友执行编辑并单击“保存”,最后您单击“保存”-无需使用ETag或Content-MD5 HTTP标头为了重新发明轮子以防止出现问题(例如您擦拭朋友更改),该解决方案已经是HTTP协议的一部分,因此仅使用它就很有意义。

通常,我同意AOL(运行webpagetest.org的人)关于“一种尺寸适合所有人”的建议-最好不要在相差一秒钟后,用模糊字符串(ETag通常不太漂亮或人类可读)堵塞HTTP标头。 (最后修改时间可以检测到的内容)将完成手头的工作。

如果某个页面每秒要更新几次,而您绝对需要显示最新,最准确的版本,则可能要尝试使用HTTP GET以外的解决方案,或者仅使用ETag。

请注意,您的ETag不包含每个文件系统,每个服务器配置更改等信息(例如Apache上默认的inode信息),否则当有两个服务器时,您将遇到问题(每个ETag都不匹配)。


没关系。我不确定一个例子:如果您在一个URI上都具有多个版本的内容(例如移动版或Internet Explorer版本),则可以使用ETag在每个版本中搜索匹配项(因此,它称为if-无匹配,如果不是,则为非)-根据您要求的人,答案有不同(例如,对于多个表示形式,没有一个永久性URI等)。
Metalshark,2010年

7

解释一下Coding Horror 对YSlow Firebug插件的出色评估(看来WebPageTest.org以此作为评估的基础):

“雅虎是世界上最繁忙的网站之一-它的问题可能不是您的问题。”

如果您不是每天都在负载平衡的网络中处理数百万个唯一身份,那么很有可能在优化网站时,所提供的建议并非正确的选择。


感谢您的评论,但您错了。史蒂夫· 桑德斯(Steve Sounders)在这里解释:stevesouders.com/blog/2010/09/07/webpagetest-org-and-page-speed(他是有益改进的坚定支持者-即不仅仅是对Google 有用的改进。)我们的网站是绝对足够大,可以从此类改进中感觉到速度的提高(并且已经有了)。
Django Reinhardt,2010年

2
yslow firebug扩展现在包括针对较小站点的测试,这对于大多数站点而言更加现实。
约翰·孔德

1
@Django Reinhardt-我改写了我的答复,确实很多建议对任何站点都有效,但是ETags特别引起争议,因为在Y!的情况下,该功能与负载平衡冲突
danlefree

您提供的链接上有一个指向Yahoo对ETags的描述(developer.yahoo.com/performance/rules.html#etags)的链接,可以很好地回答我的问题。(是的,不提供ETag可能对我们更好。)谢谢。
Django Reinhardt,2010年

1
@Django:如果您有多个服务器,则ETag可能是一个问题。但是,只要同一文件始终返回相同的ETag,就可以了。参见:webmasters.stackexchange.com/questions/1459/...
DisgruntledGoat
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.