NGINX中某些请求的响应没有etag

发布于 2022-09-05 07:36:12 字数 486 浏览 37 评论 0

nginx官网上说默认是开启etag的。

Syntax:    etag on | off;
Default:    
etag on;
Context:    http, server, location
This directive appeared in version 1.3.3.

为什么在同一站点的不同页面,有些请求有会etag,某些则不会呢?

图片描述

图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

美煞众生 2022-09-12 07:36:12

对于nginx,etag的格式是 unixtime-filesize
unixtime: 文件的修改时间的unix time的十六进制
filesize: 文件大小(字节)的十六进制
如果返回的内容是压缩过的,那采用weak etag,算法是一样的。

所以,要产生etag,必须有两个条件:

  1. 文件时间

  2. 文件大小

对于反代(包括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

靑春怀旧 2022-09-12 07:36:12

传输方式不同,第二个请求的 body 传输是 chunk 方式,简单来说,就是数据没有一次性传输完,没法计算传说数据的 Etag

著墨染雨君画夕 2022-09-12 07:36:12

我也遇到这个问题了,测试环境没有,生产环境有,
看了下测试环境版本是1.4.6 生产环境是1.16 都开启了gzip 猜猜和版本有关系
看了这篇文章,说的还比较符合
https://www.cnblogs.com/golov...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文