你知道HTTP协议的ETag是干什么的吗?

前言

在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的属性。如今,我请求七牛云上的一个资源: 服务器

image.png

能够经过它的响应头看到,返回了Etag字段给咱们。Etag的值为Fpl1rXE-K20cYsLu89YTzUQ3ydDk。性能

再次刷新资源: cdn

image.png
此时,HTTP的状态码变成了304,304状态码表示资源未改变。查看这次的HTTP请求头,以下:
image.png
能够看到,客户端在向服务端请求资源的时候,经过If-None-Match请求头带上了以前服务端返回的Etag的值。服务端收到第二次请求的时候,发现携带了If-None-Match字段,就从新计算服务器对应资源的Etag,若是两者匹配了,就认为资源没有发生变化,直接给客户端相应304,让客户端读取缓存中的数据。

总结

本文只是对Etag作一个概念性的讲解,而且结合了七牛云的对象存储的例子,分析了Etag缓存的流程。关于Etag,还有不少东西没有深刻讲解,好比Etag是怎么计算的,Last-Modified/If-Modified-Since是什么,以及Etag实战等,这些在后续再作深刻的讲解吧!对象

相关文章
相关标签/搜索