首页 > 解决方案 > 为什么 aiohttp 需要 await 来获取 body?

问题描述

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

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

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

有什么遗漏的地方吗?

标签: pythonaiohttp

解决方案


handler对于非常大的请求消息正文,您可能在调用时没有收到完整的正文。HTTP1/1 声明服务器可能会在请求结束之前回答(来自 RFC 2616):

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

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


推荐阅读