什么是ETag,有什么作用?
从网站优化来说,ETag是一个非常重要的信息。它是用作缓存使用的两个主要的头信息之一 (另一个是Expires)。那么ETag是什么?它有几种类型?如何设置ETag值?下面主要围绕这几个方面叙述一下自己的理解。
一、什么是ETag?
ETag:是实体标签(Entity Tag)的缩写。ETag一般不以明文形式相应给客户端。在资源的各个生命周期中,它都具有不同的值,用于标识出资源的状态。当资源发生变更时,如果其头信息中一个或者多个发生变化,或者消息实体发生变化 ,那么ETag也随之发生变化。
ETag值的变更说明资源状态已经被修改。往往可以通过时间戳就可以便宜的得到ETag头信息。在服务端中如果发回给消费者的相应从一开始起就由ETag控制,那么可以确保更细粒度的ETag升级完全由服务来进行控制。服务计算ETag值,并在相应客户端请求时将它返回给客户端。
我们也可以把ETag理解为是一个客户端与服务器联系的记号。这个记号告诉客户端,当前网页在上次请求之后是否有发生变化,当发生变化时,ETag的值重新计算,并返回200状态码。如果没有变化,返回304状态码。从本地缓存里加载整个页面信息。
二、ETag的类型以及他们之间的区别?
ETag有两种类型:强ETag(strong ETag)与弱ETag(weak ETag)
强ETag表示形式:”27FAA065-2665-4167-9C4E-C96EA23D0A11”。
弱ETag表现形式:w/“27FAA065-2665-4167-9C4E-C96EA23D0A11”。
强、弱ETag类型的出现与Apache服务器计算ETag的方式有关。Apache默认通过FileEtag中FileEtag INode Mtime Size的配置自动生成ETag(当然也可以通过用户自定义的方式)假设服务端的资源频繁被修改(如1秒内修改了N次),此时如果有用户将Apache的配置改为MTime,由于MTime只能精确到秒,那么就可以避免强ETag在1秒内的ETag总是不同而频繁刷新Cache(如果资源在秒级经常被修改,也可以通过Last-Modified来解决)。
三、如何设置ETag?
1、Apache如何设置ETag
Apache根据配置文件中的配置来设置Etag值,默认的Apache的FileEtag设置为:
FileEtagINode Mtime Size
也就是根据这三个属性来生成Etag值,他们之间通过一些算法来实现,并输出成hex的格式,相邻属性之间用-分隔,比如:"2e681a-6-5d044840",这里面的三个段,分别代表了INode,MTime,Size根据算法算出的值的Hex格式,可以改变Apache的FileEtag设置,比如设置成FileEtagSize,那么得到的Etag可能为:"6",设置了几个段,Etag值就有几个段。
详细配置步骤:
(1)、在要启用ETag的目录下增加.htaccess文件并在其中增加一行
FileETagMTime Size
以覆盖默认的Innode MTime Size的ETag,因为默认的ETag使用到的Innode会导致相同的文件在分布式服务器上产生的ETag不同。
(2)、如果.htacces文件已经存在,请确保要启用ETag的目录/.htacces文件中没有FileETagNone。如果存在FileETag None,请删去该行。
检查没有用mod_headers将ETag除去,即httpd.conf文件中没有出现下面的语句,
LoadModuleheaders_module modules/mod_headers.so Headerunset ETag
如果有,请删除Headerunset ETag这一行。然后重新启动Apache,就启用ETag了。
2、Nginx如何设置ETag
将以下代码添加到你虚拟主机的server配置里.
location .*/.(gif|jpg|jpeg|png|bmp|ico|rar|css|js|zip|xml|txt|flv|swf|mid|doc|cur|xls|pdf|txt|) {FileETag on; etag_format "%X%X"; expires 7d;}
然后重启Nginx就完成了。
另外,网站的sitemap启用Etag后:
1、百度可以更及时地响应sitemap的更新;
2、页面没有更新的情况下,对流量的消耗极小;
3、百度更加及时的抓取sitemap,便于更好的收录;
以上就是Etag的作用以及使用方法的介绍,希望对大家有帮助。
- 本文标题:什么是ETag,有什么作用?
- 本文地址:https://www.seoserp.cn/jingyan/1635.html
- 本方法技巧版权归原创作者所有,与本站立场无关。转载请注明出处。