跳到主要内容

HTTP 协议版本演进及其特性

HTTP/0.9 - 1991

HTTP/0.9 仅支持请求 HTML 文档,无法传输其他类型的文件。该版本的协议非常简洁,只允许客户端发送 GET 请求,没有请求头和响应头的概念。服务器在收到 GET 请求后,直接返回所请求的 HTML 内容,传输完成后立即关闭连接。

HTTP/1.0 - 1996

HTTP/1.0 引入了以 CRLF(回车换行)作为分隔符来组织请求报文和响应报文,从而明确区分报文头和报文体。这一改进提升了协议的灵活性,但每次请求都需要建立一个新的 TCP 连接,导致效率不高。

为什么每次请求都需要建立一个新的 TCP 连接

HTTP/1.0 采用的是短连接模式,每次请求的数据都通过一个新的 TCP 连接来发送,请求完成后,连接会立即关闭。这种设计在早期 HTTP 主要用于发送小型文本文件或 HTML 页面时是有效的。然而,随着 HTTP 应用场景的扩展和文件大小的增加,频繁建立和关闭 TCP 连接导致了效率的下降。相比之下,长连接模式允许客户端和服务器保持连接一段时间,多个请求可以在同一连接上完成,减少了 TCP 连接的次数,提高了传输效率。这也是 HTTP/1.1 采用长连接模式的重要原因之一。

HTTP/1.1 - 1999

HTTP/1.1 是目前应用最广泛的 HTTP 版本,支持长连接和短连接,使得多个请求可以共享一个 TCP 连接。它还引入了流水线和虚拟主机等功能,提高了传输效率和灵活性,减少了延迟。

短连接

短连接的优点在于能够及时释放连接资源,不会占用过多的系统资源。然而,在频繁请求数据时,需要不断地新建 TCP 连接,导致 TCP 连接的建立和断开操作频繁,降低了网络带宽和资源利用率。

长连接

长连接的优点在于建立连接的开销小,TCP 连接可重复利用,可以在一段时间内处理多次 HTTP 请求,减少了 TCP 连接建立和关闭的次数,降低了网络带宽和资源的浪费。然而,长连接需要占用一定的系统资源,并且持续占用连接可能增加服务器的监控和维护难度。

Keep-Alive 连接

如果没有持久连接,每个 HTTP 请求都需要建立独立的 TCP 连接,这会使服务器需要分配更多的资源用于连接管理和请求响应,并且客户端需要等待更长的时间,从而导致 HTTP 性能下降。持久连接技术通过减少 TCP 连接数量和延迟,提高了 HTTP 的效率和性能。

HTTP/2 - 2015

HTTP/2 采用二进制格式传输数据,支持头部压缩和服务器推送等功能。这使得多个连续的请求可以在一个 TCP 连接中并行完成,显著改善了性能,并且具备更好的兼容性。