严格来说,没有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 ExpiresHTTP/1.1 新增:
Cache-Control ETag If-None-Match例如:
Cache-Control: max-age=3600比 Expires 更灵活。
5. 分块传输(Chunked)
HTTP/1.0:
必须知道内容长度:
Content-Length: 1024HTTP/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压缩 | ❌ | ❌ | ✅ |
| 二进制传输 | ❌ | ❌ | ✅ |
| 多路复用 | ❌ | ❌ | ✅ |