什么是在HTTP请求期间的连接超时?

51

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

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

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

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

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

2个回答

89

我会尝试更加通俗易懂地回答。

连接超时 - 是客户端和服务器之间必须建立连接的时间段。假设你将浏览器(客户端)导航到某个网站(服务器),浏览器开始等待来自服务器的响应消息,但由于各种原因(例如服务器离线),这个响应可能永远不会到达。所以如果经过 X 秒后仍然没有从服务器收到响应,你的浏览器将“放弃”等待,否则它可能会一直等待下去。

请求超时 - 就像前面的情况一样,客户端不愿意等待太长时间来获取服务器的响应,而服务器也不愿意保持未使用的连接太久。一旦服务器和客户端之间建立了连接,客户端必须定期向服务器发送信息来告诉它自己还在那里。如果客户端在规定的时间内未向服务器发送任何信息,则服务器会简单地断开此连接,因为它认为客户端不再与它通信(为什么要无意义地浪费资源)。

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


3
谢谢您的问题,HTTP头中的“Connection: keep-alive”如何影响连接超时和请求超时? 感谢您的亲切回答。我还有一个问题。HTTP头中的“Connection: keep-alive”如何影响连接超时和请求超时? - 欧阳维杰
6
保持连接可以让通信双方(客户端和服务器)在同一TCP连接上发送和接收多个HTTP请求和响应。否则,每次发送新的HTTP消息时,连接都会被丢弃并创建一个新的连接。这可以提高性能,因为它避免了每次建立TCP三次握手(以及其慢启动机制)。您可以指定“超时”告诉服务器在终止连接之前等待多长时间(请求超时),以及“最大值”-可以通过此连接发送多少请求。 - Matus Dubrava
如果客户端没有设置任何超时值,会发生什么?这会导致他们的套接字永久连接吗? - 欧阳维杰
@MatusDubrava,这是不是意味着连接超时是在客户端的问题,而请求超时是在服务器端的问题呢? - heretoinfinity
3
从技术上讲,是的。请求超时是由服务器发送的指示服务器希望关闭连接的消息(请注意,有时服务器可能会在不发送消息的情况下关闭连接)。连接超时是客户端方面的问题,通常意味着客户端失去了连接,或者由于某种原因无法与服务器建立连接(例如远程防火墙正在丢弃流量或服务器崩溃)。 - Matus Dubrava
显示剩余2条评论

30

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

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

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

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

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


另一方面,如果你是服务器而不是客户端,你可能更关心请求超时。

请求超时不同于连接超时,其中客户端不愿意等待太长时间来获取来自服务器的响应。服务器也不愿意让未使用的连接保持活动状态太长时间。

一旦连接建立,客户端必须周期性地向服务器发送信息来通知服务器其仍在运行。如果在规定的时间内客户端没有发送信息,则服务器会终止该连接,认为客户端不再存在。

这种行为旨在避免浪费资源。当超时发生时,服务器将返回状态码为408请求超时响应。


1
如果客户端设置的超时时间(例如5秒)小于服务器超时时间(例如60秒),那么如果正在处理一个需要服务器响应15秒的长请求,客户端提前断开连接,服务器是否会知道? - Pranaysharma
发送头数据是否算作字节?还是需要将其作为正文数据发送? - Crashalot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接