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这两个参数一起控制的。