etag是什么意思,etag响应头
ETag_百度百科
电子标签
编辑百科名片寻求帮助
HTTP协议规范将ETag定义为“请求变量的实体值”换句话说,ETag是一个可以与Web资源相关联的令牌典型的Web资源可以是网页,但也可以是JSON或XML文档服务器单独负责判断令牌是什么及其含义,并在HTTP响应头中将其传输给客户端服务器返回以下格式:ETag:50b1c1d4f775c61:df3: DF3 客户端的查询更新格式如下:if-none-match:w/ 50 B1 C14 f 75 c 61:DF3 如果ETag没有改变,它将返回到状态304,然后不返回测试Etag主要在断点下载方面有用
编辑这是什么段落Etag?
Eta是URL的实体标签,用来表示URL对象是否发生了变化,区分不同的语言和会话等等内部意思是让服务器控制,就像Cookie一样
HTTP协议规范将ETag定义为“请求变量的实体值”换句话说,ETag是一个可以与Web资源相关联的令牌典型的Web资源可以是网页,但也可以是JSON或XML文档服务器单独负责判断令牌是什么及其含义,并在HTTP响应头中将其传输给客户端
编辑此Etag的好处和特点
1.有些网址是多语言网页,同一个网址会返回不同的东西还有不同会话,不同的Cookie有不同的内容在这种情况下,如果你通过代理,代理无法分辨上门的原因,那么你可以简单的取消缓存功能Etag解决了这个问题,因为它可以用相同的URL区分不同的对象
2.在旧的HTTP标准中有一个Last-Modified If-Modified-Since来指示URL对象是否已经更改Etag也有这个功能,因为对象的变化也会引起Etag的变化,其控制更加准确Etag有两种用法:If-Match/If-None-Match,即如果服务器的对象ID和客户端的对象ID(不)匹配,就执行这里的If-Match/If-None- Match可以一次提交多个Etag当Etag不变时,If-Match可以断开并重新传输If-None-Match可以刷新对象(当有新的Etag时返回)
3.Etag中有一个值为W/的弱标记xxxxx
。他宣称Tag是弱匹配,只能是模糊的,只有当差异达到一定阈值才会起作用。
4.Etag对于缓存CGI页面非常有用。特别是对于论坛,论坛有办法为每个帖子页面生成唯一的Etag。当帖子没有变化时,可以通过检查话题属性和比较Etag来避免刷新帖子,从而减少CGI操作和网络传输。比如你看了论坛里的帖子,就会返回Etag,减轻论坛的负担。
5.Etag在不同的URL之间没有可比性,也就是不同URL中的同一个Etag没有特别的意义。
编辑此ETag如何帮助提高性能。
智能服务器开发者将ETags与GET请求的“If-None-Match”头一起使用,可以利用客户端(如浏览器)的缓存。因为服务器首先生成ETag,所以服务器稍后可以使用它来确定页面是否被修改过。实质上,客户端通过将令牌发送回服务器来请求服务器验证其(客户端)缓存。
流程如下:
客户端请求页面(a)。返回到服务器的页面A,并向A添加一个ETag。客户端显示页面并缓存页面和ETag。客户再次请求页面A,并将服务器在最后一次请求中返回的ETag传递给服务器。服务器检查ETag,确定自最后一个客户端请求以来页面没有被修改,并直接返回响应304(未修改——未修改)和一个空的响应主体。
编辑本段的作用
Etag主要是解决一些Last-Modified解决不了的问题。
1.有些文件可能会定期更改,但其内容不会更改(仅更改时间)。这个时候,我们不希望客户端认为这个文件被修改了,重新获取;
2.有些文件修改非常频繁,比如在秒以内修改(比如1s内修改n次),If-Modified-Since可以检查的粒度是S级,所以这种修改无法判断(或者UNIX记录MTIME只精确到秒)。
3.有些服务器无法准确获取文件的最后修改时间;
由于这个原因,ETAG (EntityTags)被引入到HTTP/1.1中。ETAG只是一个与文件相关的标签,可以是版本标签,比如v1.0.0或者‘2e 681 a-6-5d 044840’,这是一个神秘的代码。但是HTTP/1.1标准并没有规定Etag的内容是什么,以及如何实现。唯一的规定是Etag需要放在 。
编辑此段落的工作方式。
Etag由服务端生成,客户端通过If-Match或If-None-Match的条件判断请求,验证资源是否被修改。通常使用If-None-Match。请求文件的过程可能如下:
====第一个请求===
1.客户端发起HTTP GET请求文件;
2.服务器处理请求,返回文件的内容和一堆头,当然包括Etag(例如, 2e681a-6-5d044840 )(假设服务器支持Etag生成,并且已经启动了Etag)。状态代码200
====第二个请求===
1.客户端启动HTTP GET来请求文件。注意,此时,客户端同时发送If-non-Match报头。这个头的内容是服务器在第一次请求时返回的ETAG: 2E681a-6-5D044840。
2.服务器判断发送的Etag与计算的Etag匹配,所以If-None-Match为假。如果不返回200,则返回304,客户端继续使用本地缓存;
过程很简单。问题是,如果服务器设置了Cache-Control:max-age又过期了怎么办?我该怎么办?
答案是同时使用,也就是说,在If-Modified-Since和If-None-Match完全匹配之前,服务器不能返回304,也就是检查修改时间和Etag。(不要陷入用谁的怪圈。)
在此段落中编辑Apache中的Etag实现。Apache首先判断是否是弱Etag,这个下面会讨论。如果没有,进入第二种情况:
h3 Etag根据配置文件中的配置设置Etag值,默认的Apache FileEtag设置为:
文件标签信息节点时间大小
也就是根据这三个属性生成Etag值,通过一些算法实现,以十六进制格式输出。相邻的属性由-分隔,例如:
Etag2e681a-6-5d044840
这三段分别代表INode、MTime和Size根据算法计算出的值的十六进制格式。(如果你在这里看到了非十六进制的字符(也就是0-f),你可能看到了上帝:)
当然,您可以更改Apache的FileEtag设置,比如将其设置为FileEtagSize,得到的Etag可能是:
Etag6
总之,如果设置了几段,那么Etag值就有几段。(不要把Etag误认为固定的3段公式)
解释
这都是关于Apache2.2中Etag的实现,因为HTTP/1.1并没有规定Etag必须是什么样的实现或格式。所以你也可以修改或者完全自己写算法来得到Etag,比如‘2 e 681 a 65d 044840’。客户端会记住并缓存这个Etag(它存储在Windows的什么地方?当您下次访问它时,您可以直接将该值与服务器生成的ETAG进行比较。
注意
无论哪种算法,都要在服务器端进行计算,所以计算会产生开销,带来性能损失。所以很多网站为了引流这一点点性能,完全禁用Etag(比如雅虎!),这其实不符合HTTP/1.1的要求,因为HTTP/1.1一直鼓励服务器尽可能开放Etag。