HTTP/1.0 vs HTTP/2.0 面试Markdown
HTTP1.0是早期版本;HTTP1.1是广泛使用版本;HTTP2.0基于二进制帧,大幅提升性能,建立在HTTPS之上。
HTTP/1.0 主要特点
- 短连接为默认:一次请求响应就断开TCP连接,每次请求都要重新三次握手。
- 没有
Host请求头,一台服务器很难部署多个虚拟主机。 - 缓存机制简陋,只有
Expires,缺少完整协商缓存。 - 串行请求,浏览器并发请求数量有限。
1.0痛点:频繁创建销毁TCP,性能差,所以出现HTTP1.1。
HTTP/1.1 改进(对比1.0)
- 默认开启keep‑alive长连接,一条TCP连接可以复用多次请求响应。
- 强制
Host请求头,支持一台服务器多个域名。 - 完善缓存:新增
If‑None‑Match、ETag协商缓存。 - 支持断点续传。
但是HTTP1.1仍然是文本协议,队头阻塞问题没有解决。
HTTP/2.0 核心改进(重点面试)
二进制帧(Binary Frame)
不再是文本报文,把报文拆成二进制帧,解析效率更高。所有帧在同一个TCP连接传输。多路复用(Multiplexing)⭐最核心
同一条TCP连接,可以同时并行发送多个请求和响应。
解决 HTTP1.1 的队头阻塞:1.1中一个请求卡住,后面全部请求排队等待;2.0多个请求互不干扰。
注意:HTTP2解决的是应用层队头阻塞,TCP层面的队头阻塞依然存在,丢包会影响整个连接。
头部压缩 HPACK
HTTP每次请求重复携带大量请求头(Cookie、User‑Agent等)。
HPACK算法对header做压缩,减少网络传输体积。服务器推送 Server Push
服务器可以主动向客户端推送资源,不用浏览器发起请求。比如访问html,服务端主动把css、js推送给浏览器。
实际业务使用不多。
- 流优先级
不同请求流设置优先级,重要资源优先传输。
关键对比表格
| 对比项 | HTTP/1.0 | HTTP/2.0 |
|---|---|---|
| 协议格式 | 文本协议 | 二进制帧协议 |
| 连接模式 | 默认短连接 | 单TCP连接,多路复用 |
| 队头阻塞 | 严重 | 解决应用层队头阻塞,TCP层仍存在 |
| 请求头 | 无压缩 | HPACK头部压缩 |
| 服务器推送 | 不支持 | 支持Server Push |
| 传输 | 串行请求 | 并行多路复用 |
面试口述版本
HTTP1.0默认是短连接,每次请求完成断开TCP,每次都要握手,性能差,缺少Host头,缓存能力弱。
HTTP1.1做了长连接、Host头、完善缓存,但还是文本协议,存在队头阻塞,同一个TCP连接请求要排队。HTTP2.0最大的特点是采用二进制帧,实现多路复用,一条TCP连接可以同时处理多个请求响应,解决应用层的队头阻塞。
同时使用HPACK做请求头压缩,减少报文大小;还支持服务器推送、流优先级。
要注意:HTTP2只解决应用层队头阻塞,如果TCP丢包,整个连接依旧会受影响。HTTP2一般都是配合HTTPS使用。
面试官追问:HTTP2还存在什么阻塞?
答:TCP层队头阻塞,发生丢包,整个TCP连接全部等待重传。