Почему django закрывает соединение раньше времени?

Добрый день. Столкнулся с неприятной проблмой при отправке запросов с мобильных приложений к Web API написаном на Django. Во время некотрых запросов происходит сброс соединения. Начал разбираться. В итоге доразбирался до вот такого простого django приложения. Проще уже некуда.

Вызываем мето /test/ методом POST и передаём туда некие бинарные данные размером ~15MB

тестируем с curl и postman

на curl всё ОК:
curl -X POST -d "@bin/ngrok" localhost:3000/test/


а на postman:
bb6e593b76954f81a08f8587c97e6aaf.png

При этом елси бинарные данные в теле не посылать, то всё ОК
7382a451c98545eb8fd3e6b94e1df95b.png

В реальном проекты посылаются текстовые данные - applicaiton/json, но я у себя смог воспроизвести только так.
Сравнение заголовков ничгео не дало. Я понятия не имею в чём проблема. Content-Length postman и curl выставляют сами, от content-type не зависит. Не знаю.
  • Вопрос задан
  • 229 просмотров
Решения вопроса 1
atomAltera
@atomAltera Автор вопроса
В общем я нашёл ответ. Дело в том то Django начинает посылвать ответ до того как клиент успеет полностью отправить тело запроса. Видимо некотрые HTTP клиенты на это не расчитаны. Нужно просто обратиться к request.body, и дождаться пока оно всё загрузится и только после эжто начинать строчить ответ
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@immaculate
Программист-путешественник
Вообще-то, Django никогда не обрабатывает запросы в одиночку. Перед ним еще стоят gunicorn/uwsgi/mod_wsgi и nginx или Apache. Кроме того, прямо в документации описаны ограничения на размер запроса.

Ну и еще бы неплохо приводить код и текст ошибки в таких вопросах.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы