使用 Django APIView 时在服务器上获取 ERR_INCOMPLETE_CHUNKED_ENCODING

Getting ERR_INCOMPLETE_CHUNKED_ENCODING on server when Django APIView is used

我们正在使用

一切都在本地工作。但是在服务器上,当我点击 Chrome 的请求时,我得到了 ERR_INCOMPLETE_CHUNKED_ENCODING 错误,当我卷曲时,响应是

curl: (18) transfer closed with outstanding read data remaining

即使我重新启动 gunicorn,我也会立即收到第一个请求的响应,但随后它挂在某处,进一步的请求不起作用。 我正在返回一个空白数组以响应不起作用的测试,因此响应长度不是问题。

在 Django 中,我从 APIView(从 rest_framework.views 导入 APIView)继承了 MyView class。当我将 APIView 更改为 View(from django.views import View) 时,服务器上的一切都开始正常工作。不确定是什么导致了问题?是 APIView 库还是 gunicorn。 我在本地尝试了 gunicorn,它有效。

您应该为用户更改 /var/lib/nginx/ 的权限,而不是执行 gunicorn。如果您的用户是用户名,您可以通过以下方式修复此错误:

chown -R username:username /var/lib/nginx

我加了

'django.middleware.http.ConditionalGetMiddleware' 

in MIDDLEWARE_CLASSES in settings.py 然后它开始工作了。 此 class 在响应中添加 Content-Length header。

在我的情况下,问题的发生是因为托管我的服务器的盒子磁盘使用率达到 100%,因此 nginx 在写入访问时失败 logs.Just 添加这个以防有人点击相同的问题。所以这可能意味着还有一些其他问题,您应该从更全面的角度进行调试。