HTTP持久连接(HTTP persistent connection, 也称作 HTTP Keep-Alive)是使用同一个 TCP 连接来发送/接受多个 HTTP 请求/应对的方法.
优势
区别与每个请求都打开独立的 TCP 连接, 持久连接的优势有:
- 减少新建 TCP 带来三次握手时间(如下图);
- 减少连接数(系统同时打开的连接数有限);
如何启用 HTTP Keep-Alive
在发起请求时携带 header: Connection: Keep-Alive
.
如果服务端支持持久连接, 则会在响应头中附带 header: Connection: Keep-Alive
.
如果服务端不支持持久连接, 则会在响应头中附带 header: Connection: close
.
Wireshark 抓包
未使用 Connection: Keep-Alive
时
其中 51
-62
条报文为第一次请求, 67
-78
条报文为第二次请求.
两次请求都有独立的三次握手及四次挥手报文. 并分别使用了50103
及50104
端口.
使用 Connection: Keep-Alive
时
其中 27
-34
条报文为第一次请求, 41
-44
条报文为第二次请求.
第一次请求有三次握手报文但没有挥手报文, 第二次请求由于复用第一次的 TCP 连接, 所以无需握手报文, 也是因为复用连接, 两次请求用的是相同的端口(50654
).
特别需要说明的是: 39
/40
是Keep Alive
检测报文, 用于确认 TCP 连接状态是否正常.