NGINX中某些请求的响应没有etag
nginx官网上说默认是开启etag的。
Syntax: etag on | off;
Default:
etag on;
Context: http, server, location
This directive appeared in version 1.3.3.
为什么在同一站点的不同页面,有些请求有会etag,某些则不会呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
对于nginx,etag的格式是 unixtime-filesize
unixtime: 文件的修改时间的unix time的十六进制
filesize: 文件大小(字节)的十六进制
如果返回的内容是压缩过的,那采用weak etag,算法是一样的。
所以,要产生etag,必须有两个条件:
文件时间
文件大小
对于反代(包括proxy_pass, uwsgi_pass, fast-cgi等),不会创建etag,头部都是由upstream创建
一般来讲,只有存在磁盘上的文件,由nginx直接读取,才会产生etag
第一个请求,是一个静态的首页
etag是59697ad6-210
59697ad6转换成十进制是1500084950,时间是2017/7/15 10:15:50 +8,这是你web server上文件的修改时间
210转换成十进制是528,就是文件的大小
第二个请求是php,通常是fast-cgi,时间和大小都无法预先确定,所以没有etag
传输方式不同,第二个请求的 body 传输是 chunk 方式,简单来说,就是数据没有一次性传输完,没法计算传说数据的 Etag
我也遇到这个问题了,测试环境没有,生产环境有,
看了下测试环境版本是1.4.6 生产环境是1.16 都开启了gzip 猜猜和版本有关系
看了这篇文章,说的还比较符合
https://www.cnblogs.com/golov...