~码铃薯~

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

HTTP 长连接和短连接

你说的应该是 HTTP 长连接和短连接。它们指的是:一次 TCP 连接是否被多次 HTTP 请求复用

1. 短连接

短连接就是:一次 HTTP 请求-响应结束后,TCP 连接就关闭

流程大致是:

TCP 三次握手
→ 发 HTTP 请求
→ 收 HTTP 响应
→ TCP 四次挥手关闭

特点:

  • HTTP/1.0 默认就是短连接。
  • 每个请求都要重新建立 TCP 连接。
  • 优点:实现简单,连接用完就释放,不会长期占用服务器资源。
  • 缺点:频繁握手、挥手,延迟高,开销大。
  • 适合:低频请求、一次性接口调用。

比如你偶尔请求一个 API,短连接没什么问题。

2. 长连接

长连接就是:TCP 连接建立后不立即关闭,后续多个 HTTP 请求复用同一条连接

流程大致是:

TCP 三次握手
→ 请求1 / 响应1
→ 请求2 / 响应2
→ 请求3 / 响应3
→ ...
→ 超时或主动关闭

特点:

  • HTTP/1.1 默认使用长连接,也叫持久连接。
  • HTTP/1.0 需要显式加:
Connection: keep-alive
  • HTTP/1.1 默认就是 keep-alive,如果要关闭,显式加:
Connection: close
  • 服务器通常会设置超时时间,比如 5 秒、60 秒内没有新请求就关闭。
  • 也可能限制一条连接最多处理多少个请求。

优点:

  • 减少 TCP 握手和挥手次数。
  • 降低延迟,提高吞吐量。
  • 对网页加载大量图片、CSS、JS 很友好。

缺点:

  • 服务器需要维护更多打开的连接。
  • 连接可能被中间代理、防火墙、负载均衡器断开。
  • 需要合理设置超时和最大请求数。

3. 对比

维度 短连接 长连接
TCP 连接 一次请求后关闭 多次请求复用
HTTP 版本 HTTP/1.0 默认 HTTP/1.1 默认
开销 每次都要握手挥手 只在开始和结束时开销
延迟 较高 较低
服务器资源 连接释放快 长期占用连接
适用场景 低频、一次性请求 高频、多次请求

4. 常见配置

Nginx 里常见:

keepalive_timeout 65;
keepalive_requests 1000;

Apache 里常见:

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

浏览器和服务器之间也会协商:

Connection: keep-alive
Keep-Alive: timeout=5, max=100

5. 注意几个误区

长连接不等于 WebSocket

HTTP 长连接仍然是 请求-响应 模式,客户端不发请求,服务器一般不能主动推消息。

WebSocket 是握手后升级协议,变成 全双工,双方可以随时发消息。

HTTP/1.1 长连接仍有队头阻塞

HTTP/1.1 虽然能复用 TCP 连接,但请求-响应基本还是串行的。前一个响应慢,后面的可能被阻塞。

HTTP/2 在一个 TCP 连接上做多路复用,多个请求可以并行,解决了 HTTP 层面的队头阻塞。但 TCP 层仍可能有队头阻塞,HTTP/3 用 QUIC 进一步解决。

长连接不是永久连接

服务器、客户端、代理都可能主动关闭。通常会设置超时时间,空闲太久就断开。

总结

  • 短连接:一次请求一次连接,简单但开销大。
  • 长连接:一条 TCP 连接反复发多个 HTTP 请求,省去重复握手,性能更好。
  • HTTP/1.0 默认短连接,HTTP/1.1 默认长连接。
  • 长连接只是 HTTP 连接复用,不是 WebSocket,也不是服务器主动推送。
posted on 2026-09-14 15:24  ~码铃薯~  阅读(10)  评论(0)    收藏  举报