--- 深入理解 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 握手时间 - 改进了拥塞控制 - 避免队头阻塞的多路复用 - 连接迁移 - 前向冗余纠错 资源下载: [PTT](https://github.com/Omooo/Android-Notes/tree/master/PPT/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3%20HTTP) [参考书籍](https://github.com/Omooo/Android-Notes/tree/master/books/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C)