内容简介:在HTTP1.1规范中,新增了一个HTTP头信息:ETag。对于普通开发者来说,可能平时真的不会接触到该HTTP头。平时接触不到或者说用得少,不代表这个请求头不重要。ETag使用得当,是可以减少服务器带宽压力的。Etag是 Entity tag的缩写,可以理解为“被请求变量的实体值”,Etag是服务端的一个资源的标识,在 HTTP 响应头中将其传送到客户端。所谓的服务端资源可以是一个Web页面,也可以是JSON或XML等。服务器单独负责判断记号是什么及其含义,并在HTTP响应头中将其传送到客户端。比如,浏览
在HTTP1.1规范中,新增了一个HTTP头信息:ETag。对于普通开发者来说,可能平时真的不会接触到该HTTP头。平时接触不到或者说用得少,不代表这个请求头不重要。ETag使用得当,是可以减少服务器带宽压力的。
什么是ETag?
Etag是 Entity tag的缩写,可以理解为“被请求变量的实体值”,Etag是服务端的一个资源的标识,在 HTTP 响应头中将其传送到客户端。所谓的服务端资源可以是一个Web页面,也可以是JSON或XML等。服务器单独负责判断记号是什么及其含义,并在HTTP响应头中将其传送到客户端。比如,浏览器第一次请求一个资源的时候,服务端给予返回,并且返回了ETag: "50b1c1d4f775c61:df3" 这样的字样给浏览器,当浏览器再次请求这个资源的时候,浏览器会将If-None-Match: W/"50b1c1d4f775c61:df3" 传输给服务端,服务端拿到该ETAG,对比资源是否发生变化,如果资源未发生改变,则返回304HTTP状态码,不返回具体的资源。
Etag实际例子讲解
我们可以通过Etag来利用浏览器的缓存,降低我们服务器的带宽压力。这是可以提升服务端的性能的(数据传输上)。七牛云的文件存储,就用到了Etag的属性。现在,我请求七牛云上的一个资源:
可以通过它的响应头看到,返回了Etag字段给我们。Etag的值为Fpl1rXE-K20cYsLu89YTzUQ3ydDk。
再次刷新资源:
此时,HTTP的状态码变成了304,304状态码表示资源未改变。查看此次的HTTP请求头,如下:
可以看到,客户端在向服务端请求资源的时候,通过If-None-Match请求头带上了之前服务端返回的Etag的值。服务端收到第二次请求的时候,发现携带了If-None-Match字段,就重新计算服务器对应资源的Etag,如果二者匹配了,就认为资源没有发生变化,直接给客户端相应304,让客户端读取缓存中的数据。
总结
本文只是对Etag做一个概念性的讲解,并且结合了七牛云的对象存储的例子,分析了Etag缓存的流程。关于Etag,还有很多东西没有深入讲解,比如Etag是怎么计算的,Last-Modified/If-Modified-Since是什么,以及Etag实战等,这些在后续再做深入的讲解吧!
以上所述就是小编给大家介绍的《你知道HTTP协议的ETag是干什么的吗?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 机器学习在干什么?
- Go语言适合干什么
- RSA大会上的中国厂商在干什么
- 面试的时候,面试官到底在干什么?应届生面试软件工程师,你要注意什么?
- 一行代码可以干什么,这位程序员要跑路了
- csproj 文件中那个空的 NuGetPackageImportStamp 是干什么的?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
数学与泛型编程
[美]亚历山大 A. 斯捷潘诺夫(Alexander A. Stepanov)、[美]丹尼尔 E. 罗斯(Daniel E. Rose) / 爱飞翔 / 机械工业出版社 / 2017-8 / 79
这是一本内容丰富而又通俗易懂的书籍,由优秀的软件设计师 Alexander A. Stepanov 与其同事 Daniel E. Rose 所撰写。作者在书中解释泛型编程的原则及其所依据的抽象数学概念,以帮助你写出简洁而强大的代码。 只要你对编程相当熟悉,并且擅长逻辑思考,那么就可以顺利阅读本书。Stepanov 与 Rose 会清晰地讲解相关的抽象代数及数论知识。他们首先解释数学家想要解决......一起来看看 《数学与泛型编程》 这本书的介绍吧!