我找到了两个关于“连接超时”的解释:
当客户端在[超时时间]秒内没有向服务器发送任何字节时,服务器会关闭套接字连接。这似乎与HTTP头(
Connection: keep-alive
)有些关系。如果在[超时时间]秒内未建立套接字连接,则客户端在此时间后停止尝试连接服务器。
所以,我对定义有些困惑。什么是连接超时?客户端连接超时和服务器端连接超时有什么区别?
TimeToLive、连接超时和请求超时之间有什么区别?
我找到了两个关于“连接超时”的解释:
当客户端在[超时时间]秒内没有向服务器发送任何字节时,服务器会关闭套接字连接。这似乎与HTTP头(Connection: keep-alive
)有些关系。
如果在[超时时间]秒内未建立套接字连接,则客户端在此时间后停止尝试连接服务器。
所以,我对定义有些困惑。什么是连接超时?客户端连接超时和服务器端连接超时有什么区别?
TimeToLive、连接超时和请求超时之间有什么区别?
我会尝试更加通俗易懂地回答。
连接超时 - 是客户端和服务器之间必须建立连接的时间段。假设你将浏览器(客户端)导航到某个网站(服务器),浏览器开始等待来自服务器的响应消息,但由于各种原因(例如服务器离线),这个响应可能永远不会到达。所以如果经过 X 秒后仍然没有从服务器收到响应,你的浏览器将“放弃”等待,否则它可能会一直等待下去。
请求超时 - 就像前面的情况一样,客户端不愿意等待太长时间来获取服务器的响应,而服务器也不愿意保持未使用的连接太久。一旦服务器和客户端之间建立了连接,客户端必须定期向服务器发送信息来告诉它自己还在那里。如果客户端在规定的时间内未向服务器发送任何信息,则服务器会简单地断开此连接,因为它认为客户端不再与它通信(为什么要无意义地浪费资源)。
生存时间(TTL) - 是指在创建数据包时设置的数值(通常为 255),告诉数据包可以在网络中存活多长时间。当这个数据包通过网络时,它会到达位于该数据包起点和目的地之间路径上的路由器。每次路由器重新发送数据包时,它也将其 TTL 值减 1,如果该值降至 0,则路由器不会重新发送数据包,而是将其丢弃,因为数据包不应该再继续存在。这个机制用于防止网络被数据淹没,因为每个数据包只能在其中存活有限的“时间”。
客户端连接超时 是一个常见的错误,每当客户端等待从任何服务器中获得响应(用于API调用或浏览器请求页面),但等待时间过长时,就会发生此错误。这个错误是在客户端上生成的,以终止连接,因为我们只能同时保持有限数量的打开连接。
通常,开发人员可以确定他们希望等待响应的时间“以秒为单位”,然后决定在内部引发此错误。大多数HTTP客户端都允许我们指定:
打开超时:您希望等待多长时间才能与服务器建立连接(第一次握手)。
读取超时:您希望等待多长时间才能获得任何给定请求的响应。
另一方面,如果你是服务器而不是客户端,你可能更关心请求超时。
请求超时不同于连接超时,其中客户端不愿意等待太长时间来获取来自服务器的响应。服务器也不愿意让未使用的连接保持活动状态太长时间。
一旦连接建立,客户端必须周期性地向服务器发送信息来通知服务器其仍在运行。如果在规定的时间内客户端没有发送信息,则服务器会终止该连接,认为客户端不再存在。
这种行为旨在避免浪费资源。当超时发生时,服务器将返回状态码为408
的请求超时
响应。