http1.1 vs http2区别
·
严格来说,没有 HTTP 1.2 这个正式标准协议。
HTTP 协议的主要版本发展如下:
-
HTTP/0.9(1991)
-
HTTP/1.0(1996)
-
HTTP/1.1(1997,最广泛使用)
-
HTTP/2(2015)
-
HTTP/3(2022)
很多人说的“HTTP1.2”通常是以下几种情况:
-
口误,实际上指 HTTP/2
-
某些厂商内部版本号,并非 IETF 标准
-
对 HTTP/1.1 的增强实现误称为 HTTP1.2
HTTP/1.0 与 HTTP/1.1 的区别
1. 长连接(Keep-Alive)
HTTP/1.0
每个请求都需要建立 TCP 连接:
建立TCP连接
↓
发送请求
↓
返回响应
↓
关闭连接
访问一个页面:
index.html
style.css
main.js
logo.png
可能建立 4 次 TCP 连接。
HTTP/1.1
默认开启长连接:
建立TCP连接
↓
请求1
↓
响应1
↓
请求2
↓
响应2
↓
关闭连接
优点:
-
减少 TCP 握手
-
降低延迟
-
提高性能
2. Host 头支持
HTTP/1.0:
GET /index.html HTTP/1.0
服务器不知道访问哪个网站。
HTTP/1.1:
GET /index.html HTTP/1.1
Host: www.example.com
同一 IP 可以部署多个网站(虚拟主机)。
3. 管道化(Pipelining)
HTTP/1.1 新增:
请求1
请求2
请求3
不用等待响应。
但实际浏览器支持不好,后来被 HTTP/2 多路复用取代。
4. 缓存机制更完善
HTTP/1.0:
If-Modified-Since
Expires
HTTP/1.1 新增:
Cache-Control
ETag
If-None-Match
例如:
Cache-Control: max-age=3600
比 Expires 更灵活。
5. 分块传输(Chunked)
HTTP/1.0:
必须知道内容长度:
Content-Length: 1024
HTTP/1.1:
支持:
Transfer-Encoding: chunked
边生成边发送:
4
Wiki
5
pedia
0
适用于:
-
文件下载
-
流式响应
-
SSE
HTTP/1.1 与 HTTP/2 的区别
HTTP/1.1
存在队头阻塞(Head Of Line Blocking)
请求1 -> 响应1
请求2 -> 等待
请求3 -> 等待
HTTP/2
多路复用:
TCP连接
├── Stream1
├── Stream2
├── Stream3
└── Stream4
多个请求同时进行。
HTTP/2 新特性
二进制帧
HTTP/1.1:
纯文本
HTTP/2:
二进制 Frame
解析效率更高。
Header 压缩
使用:
HPACK
减少重复 Header 传输。
例如:
Cookie
User-Agent
Authorization
不会每次完整发送。
Server Push(现已基本废弃)
服务器主动推送:
请求 index.html
↓
服务器顺带推送
style.css
main.js
面试常问
为什么 HTTP/2 比 HTTP/1.1 快?
答案:
-
多路复用
-
Header 压缩
-
二进制传输
-
减少 TCP 连接数量
-
降低网络延迟
总结
| 特性 | HTTP/1.0 | HTTP/1.1 | HTTP/2 |
|---|---|---|---|
| 长连接 | ❌ | ✅ 默认开启 | ✅ |
| Host头 | ❌ | ✅ | ✅ |
| 管道化 | ❌ | ✅ | ✅(多路复用) |
| Chunked | ❌ | ✅ | ✅ |
| Header压缩 | ❌ | ❌ | ✅ |
| 二进制传输 | ❌ | ❌ | ✅ |
| 多路复用 | ❌ | ❌ | ✅ |
更多推荐
所有评论(0)