当前位置: 首页 > 知识库问答 >
问题:

Flash中的HTTP POST-客户端在响应之前关闭TCP连接

谢弘阔
2023-03-14

我遇到了一个有趣的问题,HTTP 1.1 POST请求的TCP连接在请求之后立即关闭(即,在服务器可以发送响应之前)。

关于测试环境的一些细节:

客户端-Windows XP、Internet Explorer 8、Flash player 12。

服务器-Java 7

在上述行为之前,我们有几个长期存在的TCP连接,每个都被重用用于多个HTTP请求;我们打开一个长轮询,当这个轮询完成时,打开另一个。我们看到几个小时的良好行为和重用的TCP连接在上次轮询结束时打开轮询。最终(有时在正常运行12小时或更长时间后),对长期连接的轮询将发送HTTP POST,并在服务器可以写入响应之前立即发送TCP FIN。

客户的行为是始终保持民意调查的开放性,因此在这一点上,我们尝试打开一个新的民意调查。

然后,客户端以相同的行为发送另一个HTTP POST来打开新的传输控制协议;发送请求,然后从客户端发送FIN。

这种行为可能会持续几分钟,直到服务器最终做出响应终止客户端。(服务器通过遇到IO异常来检测初始关闭的连接,下次可以与客户端html" target="_blank">通信时,响应是通知客户端关闭)

编辑:我们只通过Flash客户端打开连接,不深入研究低级TCP代码。虽然Steffen Ullrich是正确的,单边关闭是可能的,应该处理,但不清楚的是,为什么单边关闭会发生在这一点上(似乎是任意的)。我们不是从应用程序中调用close来煽动这种行为。

我的问题是:

>

  • 在什么情况下,HTTP请求的传输控制协议会在收到响应之前被终止?我知道这是不良行为,也是不完整的HTTP事务,所以很可能是因为未知的原因而终止连接。

    是否有任何诊断方法可用于帮助理解问题?(我们目前正在使用Wireshark监控服务器和客户端活动。)

    笔记:

    在Wireshark中,我们看到的行为是:

    1. 为多个HTTP请求提供服务的长期TCP连接(#1)
    2. HTTP请求通过#1进行
    3. 服务器确认请求
    4. 客户端发送FIN以关闭连接#1。服务器以FIN、ACK响应。(预期的流量将是发送HTTP响应的服务器)。在这一点上,服务器会遇到IO异常
    5. 客户端打开连接#2并发送HTTP请求
    6. 行为从3岁开始持续
  • 共有1个答案

    薛晨
    2023-03-14

    发送请求后紧接着FIN不是连接关闭,而是写入关机(套接字,SHUT_WR)的关机。客户端以这种方式告诉服务器它将不再发送任何数据,但它仍然可能接收数据。这并不罕见。

     类似资料:
    • 我在RestEasy客户端-3.0.8中得到以下异常

    • socket.io 0.9 node.js 0.10.15 速递3.3.4 即:调用 --服务器端 --客户端

    • 问题内容: 如何关闭客户端的套接字连接? 我在用: socket.io 0.9 node.js 0.10.15 express3.3.4 即:呼叫 -服务器端 - 客户端 如果加载测试页,则需要来自服务器的一些值(getInitData)。 在第一页上,我获取一次数据,在重新加载或第二遍上,我获取两次数据,依此类推。 重新加载页面以及离开页面后,服务器端的连接将自动关闭。 但是在客户端,连接仍然打

    • 我刚刚开始使用hazelcast[3.3.1]。根据hazelcast应用程序和客户端教程,我创建了一个hazelcast应用程序实例和一个客户端(使用eclipse IDE)。 从客户端,我能够将对象添加到地图并成功获取它们。但是,我在实例的控制台上看到以下警告,它们似乎警告客户端断开连接。这是每个客户端get/put的正常行为吗? 在退出客户端程序之前,是否有适当的方法断开客户端与实例的连接?

    • 问题内容: 我应该在哪里关闭与Elasticsearch客户端的连接?我正在使用Spring,并且我不想使用Elasticsearch集成,因为我想学习如何首先完成它。应该只为该应用程序创建一个客户端吗?意味着它将具有单例范围?还是应该具有原型范围并为每次交互关闭连接? 问题答案: 您应该为每个应用程序使用一个客户端,使其成为单例并在应用程序关闭时关闭。

    • 问题内容: 背景 我正在客户端使用HTTP流(服务器推送)情况下的响应。尽管服务器可以通过关闭响应来关闭连接,但是客户端也需要这样做。 问题 客户端在一个单独的线程中处理,如下所示: 因此,当我从发起连接的线程进行调用时(重要的信息是它与处理输入的线程不同),该调用将无限期挂起。我什至把它留了一夜,它仍然挂着。即使打电话也无济于事。 有什么建议吗? 问题答案: 在没有可用字节的情况下,如果不更改读