我在北边安装了一堆Nginx + PHP8.0-fpm,当爬虫访问某个页面,请求中包含If-Modified-Since header,但是页面没有发生改变时,站点返回“304 Not Modified” header,如果请求协议是HTTP/2.0,一切正常,但如果请求协议是HTTP/1.1,Nginx日志中就会出现警告:
[warn] 910 # 910: * 21961 upstream sent more data than specified in "Content-Length" header while reading upstream, client: 66.249.76.145, server: site.com, request: "GET /category/page-title.html HTTP / 1.1 ", upstream:" fastcgi: // unix: /var/www/php-fpm/12345.sock: ", host:"site.com"
网站引擎肯定不会向 Nginx 提供 Content-Length 标头,因此没有内容。我通过 CURL 向网站发出带有 If-Modified-Since 标头的请求来测试这一点。
为什么 Nginx 会显示此警告?这是 Nginx 错误吗?
答案1
你可能错误地认为没有内容因为 Nginx 还没有转发给你。将记录的警告视为“Nginx已丢弃上游发送了数据,尽管它不应该发送任何数据”。
204/304 被硬编码为表现为零内容长度。Nginx 的错误是误导性消息 - 但从 fastcgi 上游接收额外数据可能是正确的。
可能出现警告、错误或换行符(可以通过以下方法避免不是?>
在 .php 文件中使用)由 php 打印后返回状态代码。当您临时更改脚本中返回的状态代码时,它应该变得可见。