首页 > 解决方案 > 为什么在某些计算机上我没有收到关闭连接的 TLS 警报?

问题描述

我有一个程序可以使用 keep-alive 打开 HTTPS 连接,执行 HTTP 请求,执行其他操作,然后尝试使用同一连接执行第二个 HTTP 请求。

如果超过 5 分钟,服务器会通过发送 TLS 警报关闭连接,并且连接会进入 CLOSE_WAIT 状态。HTTPS 客户端检测到连接错误(它使用轮询检查)并改为打开一个新连接。

在几台不同的计算机上,这每次都有效。

在两种环境中,它每次都会失败。在服务器忘记连接后,客户端仍然认为它处于 ESTABLISHED 状态,客户端使用相同的套接字发送第二个 HTTP 请求并等待 ACK。ACK 永远不会到来,客户端重新传输,最终客户端抛出超时异常。客户端从未从服务器收到任何连接已关闭的指示。我已经使用 Wireshark 进行了检查。

客户端是用 python 编写的(使用请求库中的会话对象)并在云 VM 中的 Linux 上运行,服务器是 AWS API Gateway,但我不知道它是否重要。

什么可能使服务器在关闭连接时不发送任何内容,或者什么可能使客户端无法从服务器接收到有关连接关闭的消息?

标签: pythonsslhttpspython-requestsaws-api-gateway

解决方案


推荐阅读