Keep-Alive(持久连接)指一次 TCP 连接可以承载多个 HTTP 请求-响应,避免每个请求都重新三次握手和慢启动。HTTP/1.0 默认短连接,需显式 Connection: Keep-AliveHTTP/1.1 起默认开启,想关闭要显式发 Connection: close

展开解析

  • 工作方式:连接建立后保持打开,客户端可连续发多个请求;靠 Content-Length 或 chunked 分块编码来界定每个响应的边界,这是复用连接的前提。
  • 空闲回收:连接不能无限保持,服务端和中间代理都有空闲超时(如 Nginx 默认 keepalive_timeout 75 秒),超时即关闭;还有最大请求数限制。
  • 与 TCP keepalive 的区别:这是常见混淆点——HTTP Keep-Alive 是应用层的连接复用机制;TCP keepalive 是传输层的探活报文(默认 2 小时才发),两者名字像、用途完全不同。
  • 局限:HTTP/1.1 的 Keep-Alive 仍是串行"一发一收",存在队头阻塞;HTTP/2 用多路复用才真正解决并发问题。

易错点:抓包看到 Connection: keep-alive 在 HTTP/1.1 下只是冗余声明,不写也一样。

追问方向:长连接下的请求管道化为何失败、连接池的设计要点。