gpt4 book ai didi

python - Django 根据某些请求重置连接

转载 作者:行者123 更新时间:2023-11-28 18:22:05 25 4
gpt4 key购买 nike

我遇到的问题是,当向 Django 服务器发送一些请求时,它会提前关闭连接。

这里是 simple project在 Github 上

这是它在没有正文的简单 POST 请求上的工作方式: enter image description here

但是当我发送一些大小约为 15MB 的二进制数据时,Postmen 显示连接错误: enter image description here

但是 curl 工作正常

curl -X POST -d "@bin/ngrok" localhost:3000/test/

我认为这是 Postman 中的一些错误,但在移动设备上它也不起作用;

我尝试比较请求 header 。我试图折腾中间件。我尝试调试 Djnago 代码。但我可以找到解决方案。你能帮我解决这个问题吗?

更新 1

在settings.py文件中设置

FILE_UPLOAD_MAX_MEMORY_SIZE = 1000 * 1000 * 1000
DATA_UPLOAD_MAX_MEMORY_SIZE = 1000 * 1000 * 1000

没有解决问题

更新 2

我在 index 方法中添加了 print(len(request.body)) 行:

@csrf_exempt
def index(request):
print(len(request.body))

return HttpResponse("Hello")

现在可以了。但是为什么我应该将 body 提交给 complete request 呢?在我的真实项目中,我检查身份验证 token ,如果它是错误的,我没有从正文中读取任何东西。

最佳答案

是的,我可以用你的 repo 重现它。

我用 Wireshark 看了一下,看起来 Django devserver 实际上在发送整个有效负载之前就做出了响应。我不确定 HTTP 规范怎么说这是否可以,但很明显,一些客户端库(Postman 和您的移动设备使用的)认为这是一个错误,而 libcurl 等其他库则可以接受。

当您添加 print(len(request.body)) 时,它会强制 Django(和底层堆栈)消耗整个主体,以便在输出响应之前计算出它的长度。

在 uwsgi 下运行应用程序时也会发生此行为,这是值得的。

TCP 流在 Wireshark 中看起来像这样: enter image description here

关于python - Django 根据某些请求重置连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44562269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com