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

什么是HTTP的长连接?

  1. 长连接和短连接主要指的是TCP连接的持续时间,因为HTTP是基于TCP的应用层协议。TCP连接是双向通道,可以保持一段时间不关闭,这样才有了长连接和短连接的概念。
  1. 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

标签: java, Java面试题, 操作系统, Java问题合集, Java编程, Java问题精选, Java常见问题, 操作系统面试题