HTTP 协议规格说明定义ETag为“被请求变量的实体值”。 另一种说法是,ETag是一个可以与Web资源关联的记号(token)。典型的Web资源可以一个Web页,但也可能是JSON或XML文档。服务器单独负责判断记号是什么及其含义,并在HTTP响应头中将其传送到客户端,以下是服务器端返回的格式:
ETag: "50b1c1d4f775c61:df3"
客户端的查询更新格式是这样的:
If-None-Match: W/"50b1c1d4f775c61:df3"
如果ETag没改变,则返回状态304然后不返回。

ETag工作过程:

   1,客户端请求一个页面(A)。

   2,服务器返回页面A,并在给A加上一个ETag。

   3,客户端展现该页面,并将页面连同ETag一起缓存。

   4,客户再次请求页面A,并将上次请求时服务器返回的ETag一起传递给服务器。

   5,服务器检查该ETag,并判断出该页面自上次客户端请求之后还未被修改,直接返回响应304和一个空的响应体。


ETag与Last-Modified区别:

Etag是在HTTP 1.1中引入的,为了解决一些Last-Modified无法解决的问题,比如:
       1.网站中的某些文件会定期的更新,但是文件内容并为改变;
       2.文件更新非常频繁,Last-Modified精确到秒不能满足需求;
       3.部分服务器不支持精确时间;


配置:
   下载:
   重新编译nginx,加上etag模块
       ./configure --add-module=./nginx-static-etags && make
   nginx关于etags配置:
       location ~ \.(mp4|flv|jpg|jpeg|png|bmp)$ {
           expires 30d;
           FileETag on;
           etag_format "%X%X";
       }



linux交流群:22346652。欢迎Linux爱好者加入,一起学习,一起进步。