HTTP协议中的KeepAlive - xbwen/xbwen.github.io GitHub Wiki

HTTP协议,可以采用持续连接,也可以采用非持续连接。其行为是通过头部中的Connection属性来指定的。

如果HTTP请求头中,设置成:

Connection: close

这相当于是Client告诉Server,使用非持续连接,服务器在发送完响应内容后,就关闭该TCP连接。

如果在HTTP请求头中,设置成:

Connection: keep-alive

相当于是Client告诉Server,使用持续连接,服务器在发送完响应内容后,不要关闭该TCP连接。后续的请求和响应,仍然通过该TCP连接进行。

HTTP的KeepAlive还需要Server端的支持。以Nginx为例,如果Nginx的配置文件中,设置成:

keepalive_timeout  0;

则代表不启用KeepAlive功能,使用非持续连接。

如果设置成非零的数值:

keepalive_timeout  60;

则代表启用KeepAlive功能,使用持续连接。这里的单位是秒,表示一个TCP连接如果在60秒没有数据传输,Nginx将会主动断掉该连接。

如果在Nginx配置文件中,不对keepalive_timeout进行配置,它将使用默认值75s。

Nginx中还有一个与KeepAlive相关的参数,是keepalive_requests:

keepalive_requests  200;

它表示一个TCP连接最多接收200次数据传输,超过后,Nginx将会断掉该连接。其默认值是100。

可见,Server端的KeepAlive行为,是由keepalive_timeout和keepalive_requests这两个参数一起控制的。