etag php,为什么要关闭ETag?

我在给自己的独立博客做SEO的过程中,通过网络学习了很多知识,其中关于Apache的配置方面,很多文章都在说要关闭ETag,但是它们大都是直接说关闭ETag,没有说明为什么要关闭ETag?今天,麦新杰专门研究了下这个问题,并找到了答案。

什么是ETag?

要说清楚为什么要关闭ETag,需要先学习ETag的工作原理,请参考这篇文章:ETag的工作原理。

ETag是用来控制Web服务器发送页面的,如果页面至上次请求时一直没有发生变化,下次被请求时,浏览器通过比对服务器两次发过来的页面ETag值,就能够知道页面没有变化,服务器不用发送完整页面内容,浏览器直接调用自己的缓存即可。这样可以减轻服务器的压力并加快浏览器对页面的展现速度。

ETag这么好,为什么要关闭呢?

通过查阅网络上大量的文章,寻找相关线索,麦新杰发现了为什么网络上大家都在说要关闭ETag的可能原因。

首先,要理解一点,那就是在网络上,每多文章都是千篇一律的。比如某个人说要这样,那么很多人都会去学这样,并且很少刨根问底为什么要这样。我在寻找为什么要关闭ETag这个问题时,遇到的也是这样的情况。找到的99%的文章都说要关闭ETag,但是不说为什么。

关闭ETag的原因很可能来自Yahoo的YSlow页面分析工具。

Yahoo的YSlow这个工具会分析页面的加载时间,做SEO的人都懂,页面加载越快,对搜索引擎就越友好,可能获得的排名就越靠前。

那么,为什么YSlow这个工具要建议大家关闭ETag呢?

ETag可能存在的2个问题

1, 大型网站多使用负载分担的方式来调度HTTP请求,所以,同一个客户端对同一个页面的多次请求,很可能被分配到不同的服务器来相应,而根据ETag的计算原理(计算参数包括inode,最后修改时间,和文件大小),不同的服务器,在其它所有方面都一样的情况下,对于同一页面也能够计算出不同的ETag。因此,这时,虽然页面没有发生任何变化,但是服务器还是会给出不同的ETag,重新发送完整的页面内容。这并不是我们希望发生的。

2, ETag的计算占用服务器的CPU资源。

关于第一个问题,其实可以通过修改配置的方式来解决,让ETag的计算不要区分不同的服务器即可,当然,也可以通过关闭ETag来解决。

关于第二个问题,其实没有说完,如果仅仅因为暂用CPU资源就关闭,那么关闭之后就没有ETag所带来的功能了。

关闭ETag,提升服务器性能

其实,实现ETag同样功能的参数还有一个,就是HTTP响应报文中的Last-Modified参数(还是请参考ETag工作原理一文)。Last-Modified参数精确到秒,实现与ETag同样的功能。

Apache判断页面内容是否有更新优先查看ETag,能用ETag就不用管Last-Modified,因为使用Last-Modified参数有个缺陷,如果一个页面在1秒内被多次改变,使用Last-Modified参数是判断不出来的。

如果我们关闭了ETag,Apache服务器就会到了必须使用Last-Modified参数来判断的状态。这时,服务器不用消耗计算ETag的资源,只要您的网站内容能够接受忽略在1秒内对页面的更新这样的条件,关闭ETag确实可以提升服务器性能,提升页面加载速度。

我想,大部分网站都是可以接受忽略在1秒内对页面的更新这样的条件的,这就是YSlow建议关闭ETag的原因。

YSlow建议关闭ETag,最初一批SEO学会了,写了很多文章说要关闭ETag,更多的后来人就跟着学,全部都关闭ETag,网络上充满了关闭ETag的文章。为什么关闭要ETag,恐怕只有这里的一篇。希望我的分析是正确的,欢迎交流。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值