如何告诉Django不要缓冲HTTP POST数据?

Vi.*_*Vi. 9 python django http-post buffering

客户端将mjpeg流发布为HTTP POST:

POST /feed/testfeed HTTP/1.0
Content-type: multipart/x-mixed-replace; boundary=--myboundary

--myboundary
Content-length: 14179
Content-type: image/jpeg

....JFIF....
....
Run Code Online (Sandbox Code Playgroud)

我看不到Django中的传入数据.request.read(6)返回空字符串.我添加了假的"content-Length"标题:

POST /feed/testfeed HTTP/1.0
Content-Length: -1
Content-type: multipart/x-mixed-replace; boundary=--myboundary

...
Run Code Online (Sandbox Code Playgroud)

现在它以最大速度读取整个数据.request.read(6)仅在我中断连接后才返回(包含整个数据,而不仅仅是预期的6个字节).

当我使用"PUT"请求而不是"POST"请求时,行为相同.

如何关闭POST请求的缓冲?

kgr*_*kgr 1

这里有一点猜测(因为你没有解释你如何准确地为网站提供服务),但我认为不是 Django 进行缓冲,而是在它前面的 Web 服务器。是否可以禁用或缓解此问题取决于您实际使用的服务器。

您可能对以下内容感兴趣(对于 Nginx):

基本上看来,使用 Nginx 禁用此行为可能是不可能的(请参阅禁用 nginx 中的请求缓冲)。不确定其他服务器,但那里有很多讨论,所以使用谷歌应该会产生大量信息。