-
HTTP/1.1:每个资源请求通常需要单独的TCP连接,尽管支持Keep-Alive机制,允许在同一个TCP连接上连续发送多个请求。但通常浏览器限制并发TCP连接数(例如,每个域名最多6个并发连接)。
-
HTTP/2:引入了多路复用机制,在一个TCP连接上可以并发发送多个请求和响应,这显著提高了传输效率。因此,在HTTP/2中,一个域名通常只需要一个TCP连接即可并发处理多个请求。
HTTP/1.1 和 HTTP/2的连接机制
HTTP/1.1
- 多连接:浏览器通常对每个域名同时建立多个TCP连接来并发处理多个请求。
- Keep-Alive:HTTP/1.1引入了Keep-Alive头部,允许在一个TCP连接上连续发送多个请求,减少连接建立和关闭的开销。
- 并发连接数限制:通常浏览器限制每个域名的并发连接数(例如,6个并发连接)。
HTTP/2
- 单连接多路复用:在一个TCP连接上并发处理多个请求和响应,每个请求/响应都有一个唯一的流ID,所有流共享同一个连接。这大大提高了传输效率,减少了延迟。
- 头部压缩:HTTP/2使用HPACK压缩算法来减少HTTP头部的大小,提高了传输效率。
- 优先级和流量控制:HTTP/2允许客户端指定请求的优先级,并对流量进行细粒度控制。
示例
假设你要加载一个包含多个资源的网页:
HTTP/1.1
1. example.com/index.html
2. example.com/style.css
3. example.com/script.js
4. example.com/image1.jpg
5. example.com/image2.jpg
6. example.com/data.json每个资源可能会使用单独的TCP连接,但浏览器通常会对每个域名限制并发连接数(例如6个),多余的请求会排队等待。
请求示例:(虽然比较模糊,还是可以看到请求总是有6个同时返回,后续的都需要等待)
很明显的一个队头堵塞,后续请求需要等待前面的请求返回值才能继续获取结果
HTTP/2
1. example.com/index.html
2. example.com/style.css
3. example.com/script.js
4. example.com/image1.jpg
5. example.com/image2.jpg
6. example.com/data.json所有资源请求共享一个TCP连接,利用多路复用机制并发发送和接收数据。
结论
在HTTP/2中,通常一个域名只需要一个TCP连接即可并发处理多个请求,这显著提高了传输效率,减少了延迟和资源消耗。而在HTTP/1.1中,尽管支持Keep-Alive机制,但通常会对每个域名建立多个TCP连接,并受到并发连接数的限制。