2.9 KiB
本篇是这次分享的大纲,PTT 以及相关资源都放到文末了。
这次给大家带来的分享主题是,深入理解 HTTP,从 HTTP/1.x 到 HTTP/3。
HTTP 是应用层最常见的协议,本次分享先从大家最熟悉也是应用最广泛的 HTTP/1.x 开始,再到大幅度改善性能的 HTTP/2,最后再到未来发展趋势的 HTTP/3。
在 20 世界 90 年代初期,互联网世界还很匮乏,计算机处理能力低、存储容量有限,网上的资源大多都是纯文本。这一时期的 HTTP 被定义为 0.9 版本,它只支持 "Get" 式的从服务端获取 HTML 文本。需要特殊说明的是,0.9 版本并不是一个正式版本。
在 1996 年,正式发布了 HTTP/1.0,它是一个互联网标准。它引入了:
- 增加了 HEAD、POST 等方法
- 增加了相应状态码,标记可能的错误原因
- 引入了协议版本号的概念
- 引入了 HTTP Header 的概念,让 HTTP 处理请求和响应更加灵活
- 传输的数据不再仅限于文本
HTTP/1.0 已经有现代 HTTP 的雏形了,但是随着互联网的发展,各种图片、音视频格式的出现,HTTP/1.0 显然已不能满足需求,同时还有短连接造成巨大的性能损耗,没多久,HTTP/1.1 发布,它有以下特点:
- 增加了 PUT、DELETE 等新方法
- 增加了缓存管理和控制
- 长连接
- 允许响应数据分块(chunked)
- 强制要求 Host 头部,让互联网主机托管成为可能
现在广泛使用的版本就是 HTTP/1.1,很难想象,这竟然是一个二十多年前的版本。
HTTP 基于请求响应模型,这就导致应用层面的队头阻塞问题,同时并未对 Header 头部进行压缩,当携带大量头部数据,比如 Cookie 时,传输效率自然不堪。
Google 率先发布了 SPDY 协议,后续 IETF 组织在 SPDY 协议的基础上,在 2015 年正式发布 HTTP/2,此时 HTTP 已经没有小版本号的概念了。HTTP/2 增加了一下特性:
- 多路复用
- 二进制分帧层,不再是纯文本
- 头部压缩 HPACK 算法
- 请求优先级
- 服务器推送
- 增强了安全性,“事实上” 的加密通信
但是 HTTP/2 只是在应用层解决了由请求响应模型造成的队头阻塞问题,并未解决在传输层由于 TCP 必须保证资源有序到达所带来的 TCP 队头阻塞问题,那该怎么办呢?
那就把 TCP 换掉咯?emmm,HTTP/3 正是这样做的,HTTP/3 底层不再依赖于 TCP,而是 UDP。目前 HTTP/3 正处于草案阶段,它带来了以下特性:
- 减少了 TCP 三次握手及 TLS 握手时间
- 改进了拥塞控制
- 避免队头阻塞的多路复用
- 连接迁移
- 前向冗余纠错
资源下载: