Django Rest Framework не возвращает ответ, если ответ слишком большой. http код 0
Мы создаем API на Django и используем Django Rest Framework. Этот API находится между двумя серверами, поэтому он получает запросы от сервера A, делает запросы к серверу B, форматирует ответ от сервера B и отвечает обратно серверу A с отформатированными данными.
Обработчик представления расширяет класс ApiView из DRF, а ответ представляет собой объект Response из DRF.
Вот псевдокод из файла views.py, чтобы представить ситуацию в перспективе:
class dummy(APIView)
# define auth here
def get(request):
# handle the request from server A
# get the content here, from server B
# content is a list of up to 1028 elements
response = Response({'status':'success','content':content}, status=200)
return response <--- fails here if content length > 200 elements
Содержание представляет собой список dicts, каждый dicts содержит 4 - 5 пар ключ/значение, если длина этого списка меньше 200 элементов, ответ проходит нормально, но все, что больше 200 элементов, приведет к коду ответа 0 и никакого сообщения об ошибке, объясняющего, что произошло, кроме broken pipe
ошибка сервера A.
Мы увеличили таймаут на запрос от сервера A до 30 секунд, просто чтобы убедиться, и это ничего не изменило, ошибка также происходит намного быстрее, чем 30 секунд, поэтому мы знаем, что сервер A не думает, что API отключился.
Сервер B отвечает точно так, как ожидалось, и мы не получаем от него никаких ошибок.
Это просто передаваемый текст, никаких длинных строк или закодированных данных, есть ли ограничение на размер ответа в Django Rest Framework? Я не смог найти никаких ссылок на это, я видел только ограничения на размер запроса.
Мы стараемся избегать пагинации, но я знаю, что это вариант, если все остальное не удается, просто меня удивляет, что ответ, содержащий не более 5000 строк текста, может нарушить DRF.