Как сказать Django не буферизовать данные HTTP POST? - PullRequest
9 голосов
/ 05 июля 2011

Клиент отправляет поток 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":

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

...

Теперь он читает все данные с максимальной скоростью. request.read(6) возвращает (со всеми данными, а не только с ожидаемыми 6 байтами) только после того, как я прерву соединение.

То же самое происходит, когда я использую запрос "PUT" вместо запроса "POST".

Как отключить буферизацию POST-запроса?

1 Ответ

1 голос
/ 17 марта 2013

Это немного догадка (потому что вы не объяснили, как именно вы обслуживаете веб-сайт), но я думаю, что буферизуется не Django, а веб-сервер перед ним. То, может ли это быть отключено или смягчено, зависит от сервера, который вы фактически используете.

Вас может заинтересовать следующее (в случае Nginx):

Похоже, что при отключении Nginx такое поведение может оказаться невозможным (см. Отключить буферизацию запросов в nginx ). Не уверен насчет других серверов, но есть много дискуссий, поэтому использование Google должно дать много информации.

...