python - 为什么在某些计算机上我没有收到关闭连接的 TLS 警报?
问题描述
我有一个程序可以使用 keep-alive 打开 HTTPS 连接,执行 HTTP 请求,执行其他操作,然后尝试使用同一连接执行第二个 HTTP 请求。
如果超过 5 分钟,服务器会通过发送 TLS 警报关闭连接,并且连接会进入 CLOSE_WAIT 状态。HTTPS 客户端检测到连接错误(它使用轮询检查)并改为打开一个新连接。
在几台不同的计算机上,这每次都有效。
在两种环境中,它每次都会失败。在服务器忘记连接后,客户端仍然认为它处于 ESTABLISHED 状态,客户端使用相同的套接字发送第二个 HTTP 请求并等待 ACK。ACK 永远不会到来,客户端重新传输,最终客户端抛出超时异常。客户端从未从服务器收到任何连接已关闭的指示。我已经使用 Wireshark 进行了检查。
客户端是用 python 编写的(使用请求库中的会话对象)并在云 VM 中的 Linux 上运行,服务器是 AWS API Gateway,但我不知道它是否重要。
什么可能使服务器在关闭连接时不发送任何内容,或者什么可能使客户端无法从服务器接收到有关连接关闭的消息?
解决方案
推荐阅读
- javascript - 如何将类应用于下拉菜单中的单击元素?
- r - 匹配 R 中的新旧列名
- bash - MarkDuplicates 错误无法创建 Java 虚拟机
- android - Jetpack 在 WebView 中编写空字符串
- python - django:request.POST.get() 返回 NoneType
- python - Selenium 无法识别 xpath
- python - Matplotlib imshow 未在交互模式下显示
- ios - 无法取消归档手表发送的文件
- angular - Angular - 如何在模式/对话框窗口中对复选框列进行内联批量更新
- c# - gRPC - 限制客户端请求(限制)