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