客户端正在将 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....
....
我在 Django 中根本看不到任何传入数据。 request.read(6)
返回空字符串。我添加了假的“content-Length” header :
POST /feed/testfeed HTTP/1.0
Content-Length: -1
Content-type: multipart/x-mixed-replace; boundary=--myboundary
...
现在它以最快的速度读取整个数据。 request.read(6)
仅在我中断连接后返回(包含全部数据,而不仅仅是预期的 6 个字节)。
相同的行为是当我使用“PUT”请求而不是“POST”请求时。
如何关闭POST请求的缓冲?
最佳答案
这里有点猜测(因为你没有解释你是如何准确地为网站提供服务的),但我认为不是 Django 做缓冲,而是在它前面的网络服务器。是否可以禁用或缓解此问题取决于您实际使用的服务器。
您可能对以下内容感兴趣(如果是 Nginx):
- http://forum.nginx.org/read.php?2,94176,94176#msg-94176
- https://serverfault.com/questions/420821/nginx-buffering-data-before-sending-to-fastcgi
- http://nginx.2469901.n2.nabble.com/nginx-proxying-do-not-locally-save-buffer-uploaded-files-td6332400.html
基本上看来,Nginx 禁用此行为可能是不可能的(参见 disable request buffering in nginx )。不确定其他服务器,但那里有很多讨论,所以使用谷歌应该会产生很多信息。
关于python - 如何告诉 Django 不要缓冲 HTTP POST 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6587164/