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

What is a connection timeout during a http request

我在"connection timeout"上找到了两个解释:

  1. 当客户端在 [timeout] 秒内未向服务器发送任何字节时,服务器将关闭套接字连接。它似乎与 HTTP header (Connection: keep-alive).

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

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

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

我会尽量用非正式的方式回答。

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

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

生存时间 (TTL) - 是在创建数据包时设置的数据包内部指定值(通常为 255),表示数据包可以使用多长时间留在网络中。当此数据包通过网络时,它会到达位于数据包来源和目的地之间路径上的路由器。每次路由器重新发送数据包时,它也会将其 TTL 值减 1,如果该值下降到 0,路由器不会重新发送数据包,而是简单地丢弃它,因为数据包不应该再存在了。此机制用于防止网络被数据淹没,因为每个数据包只能在其中存在有限的 'time'。

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

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

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

  • Open Timeout:您希望等待多长时间与服务器建立连接(第一次握手)。

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


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

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

一旦连接建立,客户端必须通过定期发送信息来通知服务器它仍然存在。如果客户端在指定时间内失败,服务器会终止此连接,因为它认为客户端不再存在。

此行为旨在避免浪费资源。当发生超时时,服务器 returns 一个带有 408 状态码的 Request Timeout 响应。