什么是http请求期间的连接超时

问题描述 投票:0回答:2

我找到了关于“连接超时”的两种解释:

  1. 当客户端在 [timeout] 秒内没有向服务器发送任何字节时,服务器将关闭套接字连接。它似乎与 HTTP 标头有一些关系 (

    Connection: keep-alive
    )。

  2. 如果在此期间未建立套接字连接,客户端将在 [timeout] 秒后停止尝试连接到服务器。

所以我对这个定义感到困惑。什么是连接超时?客户端连接超时和服务器端连接超时有什么区别?

TimeToLive、连接超时和请求超时有什么区别?

http timeout connection-timeout
2个回答
96
投票

我会尝试更非正式地回答这个问题。

连接超时 - 是客户端和服务器之间必须建立连接的时间段。假设您将浏览器(客户端)导航到某个网站(服务器)。发生的情况是,您的浏览器开始侦听来自该服务器的响应消息,但由于各种原因(例如服务器离线),该响应可能永远不会到达。因此,如果 X 秒后服务器仍然没有响应,您的浏览器将“放弃”等待,否则可能会陷入永恒的等待。

请求超时 - 就像前面的情况一样,客户端不愿意等待服务器的响应太长时间,服务器也不愿意让未使用的连接保持活动状态太久。一旦服务器和客户端之间的连接建立,客户端必须通过向服务器发送信息定期通知服务器它仍然存在。如果客户端未能在指定时间内向服务器发送任何信息,服务器会简单地断开此连接,因为它认为客户端不再与其通信(为什么会毫无意义地浪费资源)。

生存时间 (TTL) - 是数据包内部指定的值,在创建数据包时设置(通常为 255),指示数据包可以在网络中保持活动状态的时间。当该数据包通过网络时,它到达位于数据包的来源和目的地之间的路径上的路由器。每次路由器将数据包转发到下一个设备时,它也会将其 TTL 值减 1。如果该值降至 0,则路由器不会转发数据包,而是将其丢弃,因为数据包不再存在。这种机制用于防止网络被数据淹没,因为每个数据包只能传递有限的次数,即它仅在其中“生存”有限的“时间”。


34
投票

连接超时(客户端)VS 请求超时(服务器端)

连接超时是一种常见错误,当客户端在从任何服务器(对于 API 调用或浏览器请求页面)获取响应之前等待太长时间时,就会发生这种错误。此错误是在客户端终止连接时生成的,因为我们只能同时保留有限数量的打开连接。

通常,开发人员可以确定在决定在内部引发此错误之前他们想要等待响应的时间“以秒为单位”。大多数 HTTP 客户端允许我们指定:

  • 打开超时:您要等待多长时间才能与服务器建立连接(第一次握手)。

  • 读取超时:您希望等待多长时间才能获得任何给定请求的响应。


另一方面,如果您是服务器而不是客户端,您可能对请求超时更感兴趣。

请求超时与连接超时不同,客户端不愿意等待服务器响应太长时间。服务器也不愿意让未使用的连接保持活动太长时间。

一旦建立连接,客户端必须通过定期发送信息来不断通知服务器它仍然存在。如果客户端在指定时间内未能完成此操作,服务器将终止此连接,因为它认为客户端已不存在。

此行为是为了避免浪费资源。当发生超时时,服务器返回带有

Request Timeout
状态代码的
408
响应。

© www.soinside.com 2019 - 2024. All rights reserved.