在讨论网络协议时,经常会有人提出这样一个问题:“既然HTTP是基于TCP的,而TCP本身支持长连接,为什么HTTP不支持长连接?”这种说法其实是一种误解。实际上,HTTP确实可以并且经常使用长连接(也称为持久连接)。
什么是长连接?
首先,我们需要明确什么是“长连接”。在网络通信中,“长连接”指的是客户端和服务端之间的连接在完成一次数据交换后不会立即关闭,而是保持打开状态以供后续请求和响应使用。这种方式减少了建立和断开连接所需的额外开销,提高了效率,尤其是在短时间内需要进行多次交互的情况下。
为什么有人认为 HTTP 不支持长连接?
历史原因:HTTP/1.0 的短连接给人留下深刻印象,部分旧系统或配置不当的服务仍可能关闭连接。
无状态协议:HTTP 本身是无状态的,长连接只是复用 TCP 通道,但每次请求仍需独立处理(如携带 Cookie)。
代理服务器问题:某些中间代理可能错误地关闭连接,导致长连接失效。
HTTP/1.0
最初的HTTP/1.0标准并不默认支持长连接。每次请求-响应周期完成后,连接就会被关闭。然而,HTTP/1.0引入了一个可选的