【问题标题】:How HTTP client detect web server crashHTTP 客户端如何检测 Web 服务器崩溃
【发布时间】:2014-12-11 14:11:09
【问题描述】:

来自HTTP:The definitive guide

但是没有 Content-Length,客户端无法区分 成功连接在消息和连接结束时关闭 由于消息中间的服务器崩溃而关闭。

假设为此目的,“服务器崩溃”是指服务器的硬件或操作系统崩溃,而没有关闭 TCP 连接或可能链接被破坏。

如果 web 服务器在没有关闭 TCP 连接的情况下崩溃,客户端如何检测到连接“已关闭”?

据我所知,如果未发送 FIN 段,客户端将继续等待数据,除非有计时器或尝试发送一些数据(失败检测 TCP 连接关闭)。

这是如何在 HTTP 中完成的?

【问题讨论】:

    标签: http tcp


    【解决方案1】:

    如果Web服务器在没有关闭TCP连接的情况下崩溃,客户端如何检测到连接“已关闭”?

    由于关闭将由内核完成,这意味着整个系统崩溃或连接在其他地方中断(路由器崩溃、服务器端断电或类似情况)。

    只有当您向服务器发送数据并且没有得到任何有用的响应时,您才能检测到这一点。

    据我所知,如果未发送 FIN 段,客户端将继续等待数据,除非有计时器或尝试发送一些数据(失败检测 TCP 连接关闭)。

    这是如何在 HTTP 中完成的?

    HTTP 使用 TCP 作为底层协议,因此如果 TCP 检测到连接,HTTP 也会关闭。此外,在大多数情况下,HTTP 可以通过使用来自 Content-length 标头的信息或具有分块传输编码的类似信息来检测响应是否完整。在响应结束仅由连接关闭指示的少数情况下,HTTP 只能依靠 TCP 来检测问题。到目前为止的理论,但实际上大多数浏览器只是忽略不完整的响应并显示他们得到的尽可能多的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-17
      • 1970-01-01
      • 1970-01-01
      • 2021-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多