实际情景:
公司项目有一个下载文件的功能,没有经过Nginx代理之前,好好的,正常下载;
加入了Nginx代理之后,过Nginx访问就会有 err_empty_response 这个错误;
搞了半天,nginx.conf加入两行代码 proxy_http_version 1.1; proxy_set_header Connection ""; error.log又报这个错误 upstream sent duplicate header line: "Transfer-Encoding: chunked", previous value: "Transfer-Encoding: chunked" while reading response header from upstream;页面报 502,后台没有任何异常;非常纳闷。
经过仔细观察之后,确定,要支持nginx Http1.1,所以nginx的 location位置 加入以下两行代码是没错的;
proxy_http_version 1.1;
proxy_set_header Connection "";
但是为什么依然报错误呢?
注意这个错误,upstream sent duplicate header line: "Transfer-Encoding: chunked" 翻译过来就是“上游发送了重复的标题行:“传输编码:分块”” ;
有的文章说,响应header要有 Transfer-Encoding 这个;打断点之后,确实header有这个东西;但是其实这个异常应该是说,下载文件返回的response的header内,不能有 Transfer-Encoding 这个 header,因为重复了(加入了proxy_http_version 1.1; proxy_set_header Connection ""; 这两个代码之后,应该就可以了,可以理解为Nginx里 Transfer-Encoding 是默认开启的);
所以,最后,在请求的响应头中去除 Transfer-Encoding 就行;至少我的情况是这样,如果你的和我的不一样,那么具体问题具体分析;
参考连接
nginx502错误和nginx服务器返回空响应体(err_empty_response)https://blog.csdn.net/baikunlong/article/details/128688083
springboot:各种下载文件的方式https://blog.csdn.net/weixin_43296313/article/details/125100824