为什么aiohttp需要等待获取身体?

问题描述 投票:0回答:1

我发现aiohttp服务器应使用await关键字来获取请求正文

async def handler(request):
  body = await request.json(). # or text(), read()

[我认为当调用handler时,请求主体已经在服务器端内存中,并且我认为这不是I / O密集型工作,需要异步操作。

还有什么遗漏的地方?

python aiohttp
1个回答
0
投票

对于一个非常大的请求消息正文,当调用handler时,您可能没有收到完整的正文。 HTTP1 / 1指出服务器可能在请求结束之前进行响应(来自RFC 2616):

发送消息正文的HTTP / 1.1(或更高版本)客户端应该在传输请求时监视网络连接的错误状态。如果客户端看到错误状态,则应立即停止发送主体。

因此,如果您在接收到整个请求消息正文之前不接受请求(例如,如果令牌无效,则是[[401未经授权,则可以立即返回4xx客户端错误代码)。


0
投票
相反,它们不在内存中。引用the documentation

虽然read(),json()和text()方法非常方便,但您应谨慎使用它们。所有这些方法将整个响应加载到内存中。例如,如果您要下载几个千兆字节的文件,这些方法将加载内存中的所有数据。相反,您可以使用content属性。

另请参见有关HTTP协议内部工作原理的其他答案。

© www.soinside.com 2019 - 2024. All rights reserved.