http keep-alive
http1.0中,connect 请求头的值是close
Connection: close
从http1.1协议开始,http request header 中connection的值默认为keep-alive。
Connection: keep-alive
这意味着,http client可以复用一个连接来多次发起请求或接收消息。http client 向 http server 发起一个请求,建立一个新的连接,http server 根据请求头中的 Connection: keep-alive
,在返回消息后并不会立即断开连接(本次http请求所建立tcp连接),而是等待一段时间关闭tcp连接。在这段时间内,http client 可以在这个tcp连接上继续发送请求。
等待时长timeout的值可以在http client和http server中指定。比如在请求头(request header)中加入:
Keep-Alive: timeout=5, max=1000
表示让http server保持连接5秒钟,本次连接最大请求数1000次。如果http server也设置来http keep alive 的timeout值,那么以两者最小的时间为准。比如http server设置了timeout=3,则会在返回头(response header)中添加:
Keep-Alive: timeout=3, max=1000
这次连接会在接收到最后一次请求后的3秒钟,被http server断开。
tcp keepalive
tcp keepalive 和 http keep-alive完全不是一回事儿。
tcp keepalive 指的是 一端通过发送小的数据包(packets)给另一端,来保持tcp连接的连接状态。通过keepalive探测( keepalive probe),可以
- 检测对方是否存活(Checking for dead peers)
- 防止网络失效造成的传输中断(Preventing disconnection due to network inactivity)
tcp keepalive 详情可参考这里
update
2020-04-19
more about http keepalive
https://www.nginx.com/blog/http-keepalives-and-web-performance/