【问题标题】:HTTP server detecting a broken network connection from a HTTP clientHTTP 服务器从 HTTP 客户端检测到断开的网络连接
【发布时间】:2010-12-16 20:08:42
【问题描述】:

我有一个 Web 应用程序,在向服务器发出 HTTP 请求后,客户端在客户端完全接收到响应之前退出(或网络连接中断)。

在这种情况下,应用程序的服务器端需要做一些清理工作。 HTTP 协议中是否有内置方法来检测这种情况。服务器如何知道客户端是在等待响应还是已经退出?

谢谢 维杰库马尔

【问题讨论】:

    标签: http networking webserver protocols


    【解决方案1】:

    不,协议没有内置任何内容来执行此操作(毕竟,您无法判断客户端本身是否已收到响应,或者只是下游代理)。

    只需让您的客户发出第二次请求,以确认它已收到并存储了原始响应。如果您没有看到及时的确认,请运行清理。

    但是,请确保您了解 Two Generals' Problem 的含义。

    【讨论】:

      【解决方案2】:

      您可能遇到网络问题...通常,当您向服务器发送 HTTP 请求时,首先发送标头,然后发送 POST 的内容(如果它是 post 方法)。同样,服务器使用标题和文档正文进行响应。标题中的第一行是状态。通常,状态 200 是成功状态,如果你得到了,那么获取文档的其余部分应该没有问题。检查这里以获取有关 HTTP 响应状态标头的详细信息 http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html

      乐: 对不起,看错了你的问题。基本上,当用户断开连接时,您没有触发器。如果你使用 OOP,你可以使用类的析构函数来清理你需要清理的任何东西。

      【讨论】:

        最近更新 更多