diff --git a/PPT/深入理解 HTTP/README.md b/PPT/深入理解 HTTP/README.md new file mode 100644 index 0000000..f0b3fd0 --- /dev/null +++ b/PPT/深入理解 HTTP/README.md @@ -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 握手时间 +- 改进了拥塞控制 +- 避免队头阻塞的多路复用 +- 连接迁移 +- 前向冗余纠错 + diff --git a/PPT/深入理解 HTTP/深入理解 HTTP【Keynote 版】.key b/PPT/深入理解 HTTP/深入理解 HTTP【Keynote 版】.key new file mode 100755 index 0000000..224d44b Binary files /dev/null and b/PPT/深入理解 HTTP/深入理解 HTTP【Keynote 版】.key differ diff --git a/PPT/深入理解 HTTP/深入理解 HTTP【PDF 版】.pdf b/PPT/深入理解 HTTP/深入理解 HTTP【PDF 版】.pdf new file mode 100644 index 0000000..f3f8523 Binary files /dev/null and b/PPT/深入理解 HTTP/深入理解 HTTP【PDF 版】.pdf differ