parent
dbc1c85257
commit
d2fa83b979
@ -0,0 +1,51 @@ |
||||
--- |
||||
深入理解 HTTP,从 HTTP/1.x 到 HTTP/3 |
||||
--- |
||||
|
||||
> 本篇是这次分享的大纲,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 握手时间 |
||||
- 改进了拥塞控制 |
||||
- 避免队头阻塞的多路复用 |
||||
- 连接迁移 |
||||
- 前向冗余纠错 |
||||
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in new issue