网站首页 > 技术文章 正文
什么是 ETag
ETag全称Entity Tag,用来标识一个资源。通常情况下,ETag更类似于指纹,如果资源发生变化了就会生成一个新的指纹,这样可以应用于客户端的缓存:服务器产生ETag,并在HTTP响应头中将其传送到客户端,服务器用它来判断页面是否被修改过,如果未修改返回304,无需传输整个对象。
如上图所示,第一次请求,服务器在返回响应时,在Http头中包含一个值为"x1323ddx"的ETag(注:HTTP中并没有指定如何生成ETag,哈希是比较理想的选择),状态码为200。
如上图所示,第二次请求,这个时候客户端请求同时发送一个If-None-Match头,这个头的内容就是我们第一次请求时服务器返回的ETag,服务器收到请求后如果资源没有发生改变,服务器的ETag是同一值,服务器就不返回200,而是返回304的响应,告诉客户端缓存有效。(由于不返回数据体,所以在资源不变的情况下后续的请求对流量消耗比较小。)
ETag语法
ETag: W/"<etag_value>"
ETag: "<etag_value>"
- W/ 可选'W/'(大小写敏感) 表示使用弱验证器。 弱验证器很容易生成,但不利于比较。 强验证器是比较的理想选择,但很难有效地生成。 相同资源的两个弱Etag值可能语义等同,但不是每个字节都相同。
- "<etag_value>"实体标签唯一地表示所请求的资源。 它们是位于双引号之间的ASCII字符串(如“675af34563dc-tr34”)。 没有明确指定生成ETag值的方法。 通常,使用内容的散列(哈希值的方式会带来一些服务器资源的消耗),最后修改时间戳的哈希值,或简单地使用版本号。
ETag 的作用
1、一些文件也许会周期性更改,但是他的内容并不改变(仅仅改变的修改时间),我们并不希望客户端认为这个文件被修改了,而重新GET;
2、某些文件修改非常频繁,比如在秒以下的时间内进行修改,(比方说1s内修改了N次),If-Modified-Since能检查到的粒度是s级的,这种修改无法判断;
3、某些服务器不能精确得到文件的最后修改时间;
4、通过设置不同的响应头Cache-Control来控制浏览器和Web代理对缓存的使用策略,通过设置请求头If-None-Match和响应头ETag,来对缓存的有效性进行验证。
- 上一篇: 记一次请求接口出现400响应码的诡异错误实录
- 下一篇: 互联网面经宝典 - 计算机网络篇(三)
猜你喜欢
- 2024-11-13 「直击面试」- 搞定计算机网络,这些问题还没有我答不出来的
- 2024-11-13 HTTP面试题 高校毕业生就业难 面试题
- 2024-11-13 HTTP的起源与发展 http的具体内容是什么
- 2024-11-13 前端优化的步骤 前端优化的步骤包括
- 2024-11-13 Python最常见的170道面试题全解析答案(四)
- 2024-11-13 前端项目中 浏览器缓存的更新不及时问题及解决方法
- 2024-11-13 你还没弄懂浏览器的缓存机制吗? 介绍一下浏览器缓存
- 2024-11-13 如何使用缓存提高系统性能? 提高缓存速度
- 2024-11-13 网络相关面试题 网络相关面试问题
- 2024-11-13 为什么你做的H5开屏那么慢?H5首屏秒开方案探讨
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-