HTTP 如何实现长连接?在什么时候会超时?

HTTP 如何实现长连接?在什么时候会超时?
什么是HTTP的长连接?
- 长连接和短连接主要指的是TCP连接的持续时间,因为HTTP是基于TCP的应用层协议。TCP连接是双向通道,可以保持一段时间不关闭,这样才有了长连接和短连接的概念。
- TCP长连接允许在一个TCP连接上发起多个HTTP请求,以减少资源消耗。例如,一次请求HTML页面,如果是短连接的话,还需要多次请求获取后续的JS/CSS等资源。
如何设置长连接?
可以通过在请求和响应头部设置Connection字段为keep-alive
来指定长连接。在HTTP/1.0协议中,长连接支持,但默认情况下是关闭的。而在HTTP/1.1及以后的版本中,默认都是长连接。
在什么情况下会发生超时?
- HTTP通常会有一个httpd守护进程,其中可以设置keep-alive timeout,当TCP连接空闲超过该时间时,连接将被关闭。此外,还可以在HTTP头部中设置超时时间。
- TCP的keep-alive功能包含三个参数,可以在系统内核的net.ipv4中进行设置。当TCP连接建立后,如果闲置时间超过了tcp_keepalive_time,则会发送探测包。如果没有收到对方的确认(ACK),则会在每隔tcp_keepalive_intvl时间再次发送,直到发送了tcp_keepalive_probes次,此时连接将被丢弃。
1. tcp_keepalive_intvl = 15
2. tcp_keepalive_probes = 5
3. tcp_keepalive_time = 1800