首页 > 解决方案 > 如果响应太大,Django Rest Framework 无法返回响应。http 代码 0

问题描述

我们正在 Django 上构建 API 并使用 Django Rest Framework。此 API 位于两台服务器之间,因此它接收来自服务器 A 的请求,向服务器 B 发出请求,格式化来自服务器 B 的响应,并使用格式化数据响应服务器 A。

视图处理程序扩展了 DRF 的 ApiView 类,响应也是 DRF 的 Response 对象。

这是 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。

标签: pythondjangohttpdjango-rest-frameworkdjango-views

解决方案


推荐阅读