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

欧阳维*_*阳维杰 4 timeout http connection-timeout

我发现了有关“连接超时”的两种解释:

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

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

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

TimeToLive,连接超时和请求超时之间有什么区别?

Mah*_*alt 17

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

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

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

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

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


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

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

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

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


Mat*_*ava 12

我将尝试非正式地回答。

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

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

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

  • 保持活动连接允许通信双方(客户端和服务器)使用同一 TCP 连接发送和接收多个 HTTP 请求和响应。否则,连接将被丢弃,并且每次发送新的 HTTP 消息时都会创建新的连接。这可以提高性能,因为它避免了每次建立 TCP 的三向握手(以及其慢启动机制)。您可以指定“timeout”,告诉服务器在终止连接之前应该等待多长时间(请求超时)和“max” - 通过此连接可以发送多少个请求。 (6认同)
  • 感谢您的热心解答。我还有一个问题。http 标头的“Connection: keep-alive”对连接超时和请求超时有何影响? (3认同)
  • @heretoinfinity 技术上是的。请求超时由服务器发送,表明服务器想要关闭连接(注意有时服务器可能会在不发送消息的情况下关闭连接)。连接超时发生在客户端,通常意味着客户端失去连接,或者由于某种原因无法与服务器建立连接(例如远程防火墙正在丢弃流量或服务器出现故障)。 (3认同)