在HTTP1.1规范中,新增了一个HTTP头信息:ETag。对于普通开发者来讲,可能平时真的不会接触到该HTTP头。平时接触不到或者说用得少,不表明这个请求头不重要。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的值为Fpl1rXE-K20cYsLu89YTzUQ3ydDk。性能
再次刷新资源: cdn
本文只是对Etag作一个概念性的讲解,而且结合了七牛云的对象存储的例子,分析了Etag缓存的流程。关于Etag,还有不少东西没有深刻讲解,好比Etag是怎么计算的,Last-Modified/If-Modified-Since是什么,以及Etag实战等,这些在后续再作深刻的讲解吧!对象