HTTP(超文本传输协议)是用于在万维网上传输超媒体文档的基础协议。HTTP协议自诞生以来经历了多个版本的演变,每个版本都引入了一些新特性和改进。以下是对各个HTTP版本的介绍:
HTTP/0.9
- 发布年份:1991年
- 特点:
- 这是最早的HTTP版本,由Tim Berners-Lee设计。
- 只支持简单的GET请求。
- 没有HTTP头信息,也不支持状态码。
- 非常简陋,只能用于传输纯文本。
HTTP/1.0
- 发布年份:1996年
- 特点:
- 引入了HTTP头信息(Headers),允许传输元数据(如Content-Type)。
- 支持多种请求方法:GET、POST、HEAD。
- 引入了状态码,用于指示请求的结果(如200 OK,404 Not Found)。
- 每个请求/响应之后都会关闭TCP连接(无连接)。
HTTP/1.1
- 发布年份:1997年(RFC 2068)和1999年(RFC 2616)
- 特点:
- 持久连接:默认启用了TCP连接的复用(Connection: keep-alive),减少了连接建立的开销。
- 增加了更多的请求方法:OPTIONS、PUT、DELETE、TRACE、CONNECT。
- 支持分块传输编码(Chunked Transfer Encoding),允许服务器分块发送响应数据。
- 引入了更多的缓存控制机制(如Cache-Control头)。
- 改进了错误处理和状态码的定义。
HTTP/2
- 发布年份:2015年(RFC 7540)
- 特点:
- 二进制传输:使用二进制格式而不是文本格式,提升了解析效率。
- 多路复用:在一个TCP连接上可以发送多个并发请求/响应,减少了连接数量。
- 头部压缩:通过HPACK算法压缩头部信息,减少了带宽消耗。
- 服务器推送:允许服务器在客户端请求之前主动推送资源,提升加载速度。
- 流控制和优先级:支持细粒度的流控制和请求优先级管理。
HTTP/3
- 发布年份:2022年(RFC 9114)
- 特点:
- 基于QUIC协议:HTTP/3运行在QUIC之上,而QUIC本身是基于UDP的协议,提供了快速连接建立和可靠传输的能力。
- 进一步减少了连接建立的延迟,因为QUIC结合了TLS 1.3的握手过程。
- 解决了HTTP/2的队头阻塞问题:由于QUIC的设计,即使单个数据包丢失也不会阻塞整个连接中的其他流。
- 增强的安全性和性能:QUIC集成了传输层安全性(TLS),并提供了更好的拥塞控制和恢复机制。
各版本比较
特性 | HTTP/0.9 | HTTP/1.0 | HTTP/1.1 | HTTP/2 | HTTP/3 |
---|---|---|---|---|---|
发布年份 | 1991 | 1996 | 1997/1999 | 2015 | 2022 |
请求方法 | GET | GET, POST, HEAD | 多种(OPTIONS等) | 多种(OPTIONS等) | 多种(OPTIONS等) |
连接复用 | 否 | 否 | 是 | 是 | 是 |
传输格式 | 文本 | 文本 | 文本 | 二进制 | 二进制 |
头部压缩 | 否 | 否 | 否 | 是(HPACK) | 是(QPACK) |
多路复用 | 否 | 否 | 否 | 是 | 是 |
基于协议 | TCP | TCP | TCP | TCP | QUIC(基于UDP) |
各版本总结
- HTTP/0.9:极其简单,仅用于传输纯文本,功能有限。
- HTTP/1.0:引入了头部和状态码,功能大大增强,但每次请求都会关闭连接。
- HTTP/1.1:改进了持久连接、缓存机制和错误处理,成为了网络应用的主要标准。
- HTTP/2:引入了二进制传输、多路复用和头部压缩,显著提升了性能。
- HTTP/3:基于QUIC协议,进一步减少了延迟,提高了传输效率和可靠性。
每个版本的演进都旨在解决前一版本的限制和不足,适应不断发展的网络环境和应用需求。
目前,最广泛使用的HTTP版本是HTTP/1.1,HTTP/3虽然有显著的性能改进(如基于QUIC协议、减少连接延迟、解决队头阻塞问题等),但目前的采用率相对较低,主要是因为QUIC的实现还在逐步完善,且网络基础设施(如路由器、防火墙等)需要时间来适应这一新的传输层协议。
尽管HTTP/2的采用率正在快速增长,但http/1.1能满足大部分的需求:
HTTP/1.1为何使用最广泛
-
广泛支持:
- HTTP/1.1是自1999年发布以来的主流HTTP版本,几乎所有的现代浏览器、服务器和代理都完全支持HTTP/1.1。
- 由于其长时间的主流地位,HTTP/1.1在各种网络设备、路由器和防火墙中也得到了广泛的支持和优化。
-
持久连接:
- 默认启用的持久连接(Connection: keep-alive)减少了连接建立和关闭的开销,提高了性能。
-
缓存控制:
- 提供了完善的缓存控制机制(如Cache-Control头),优化了带宽使用和响应时间。
-
充足的功能:
- 支持丰富的请求方法(如GET、POST、PUT、DELETE等)和头信息,使得其能够满足大部分Web应用的需求。
HTTP/3使用UDP如何保障可靠性
另外,HTTP/3是唯一一个直接使用UDP协议的HTTP版本,而其他版本都是基于TCP协议。每个版本选择不同的传输层协议,主要是基于其对连接性、可靠性和性能的要求。UDP适用于需要快速传输和较低延迟的场景,而TCP则适用于对数据传输的可靠性和顺序性要求较高的场景。
HTTP/3通过QUIC协议来保障传输的可靠性。QUIC是一个基于UDP的传输协议,它在传输层集成了可靠性、拥塞控制和错误恢复等功能,从而保证了HTTP/3传输的可靠性。以下是QUIC保障传输可靠性的主要机制:
1. 连接建立和握手
-
0-RTT 握手:
- QUIC支持0-RTT握手,即使在重新连接时也能够快速建立安全连接,减少了连接建立的延迟。
-
无连接迁移:
- QUIC允许在IP地址变化时保持连接,例如移动设备从Wi-Fi切换到移动网络时。
2. 传输层可靠性
-
独立的数据流:
- QUIC将数据划分为独立的数据流,每个数据流可以独立进行拥塞控制和错误恢复。
-
前向纠错:
- QUIC在数据包中引入了前向纠错机制,即使某些数据包丢失,接收端仍然可以通过纠错码进行恢复。
-
快速重传和拥塞控制:
- QUIC具有自己的快速重传和拥塞控制机制,可以更快地恢复丢失的数据包,并避免网络拥塞。
3. 错误恢复
-
快速恢复:
- QUIC能够快速恢复丢失的数据包,而不需要等待超时重传。
-
抗重排序:
- QUIC在设计时考虑到了UDP包的乱序到达,通过自适应的超时机制来减少对乱序包的重传。
4. 拥塞控制
-
流量控制:
- QUIC支持流量控制机制,确保发送端不会发送过多的数据,避免接收端处理不过来。
-
拥塞控制:
- QUIC在设计时考虑了TCP的拥塞控制算法,并做了一些改进,以适应UDP的特点。
5. 可靠性保证
-
TLS 1.3加密:
- QUIC集成了TLS 1.3,保证了传输过程中的数据安全性和完整性。
-
数据重传:
- 如果数据包丢失或损坏,QUIC会自动重传数据,确保数据的可靠传输。
总结
HTTP/3通过QUIC协议来保障传输的可靠性。QUIC集成了许多可靠性、拥塞控制和错误恢复等功能,包括独立的数据流、前向纠错、快速重传、拥塞控制、流量控制等,从而确保了HTTP/3传输过程中数据的安全、完整性和可靠性。这些机制使得HTTP/3在高延迟、高丢包率等不稳定网络环境下仍能提供良好的性能和可靠性。