使用aiohttp时出现aiohttp.client_exceptions.ServerDisconnectedError,但不使用其他HTTP客户端(请求,邮递员,cURL)

时间:2020-07-17 21:56:16

标签: python-asyncio aiohttp

我正在尝试通过HTTP与网络交换机通信。当我使用aiohttp执行请求时,会收到ServerDisconnectedError,但是当我尝试使用请求,cURL或Postman执行相同的请求时,则会收到HTTP响应,就像我期望的那样。我尝试在Postman中更改一堆标题,以查看是否可以得到与aiohttp类似的行为,但是没有任何东西会重现相同的错误。

我还尝试更改aiohttp请求中的某些标头。奇怪的是,导致问题的唯一原因是在aiohttp.post参数中设置了compress=True。当我以此方式执行请求时,服务器实际上确实发送了HTTP响应,但是该响应并未反映API应该如何表现(我认为它明确拒绝了我正在使用压缩的事实)。

当在Wireshark中分析这些请求时,当我使用不带compress=True的aiohttp时,交换机确实在发送HTTP响应之前确实发送了TCP FIN数据包。

关于aiohttp,我注意到的一个独特之处是它使用2个TCP数据包执行请求:第一个数据包包含HTTP方法和标头,第二个数据包包含HTTP正文。另外,在第一个数据包上设置了PSH标志。

Wireshark capture using aiohttp

使用cURL时似乎不会发生这种情况。

Wireshark capture using cURL

我想将其隔离为问题还是非问题,但是我不知道如何使程序首先在一个数据包中发送请求,然后在两个数据包中发送相同的请求。< / p>

当然,这在TCP层上可能根本不是问题。但是我不明白为什么交换机会关闭连接而不是发送HTTP错误代码。

0 个答案:

没有答案