分享
2.HTTP 的演进之路
输入“/”快速插入内容
2.HTTP 的演进之路
用户8691
用户8691
2025年9月9日修改
核心思想
技术的演进总是为了解决“效率”和“性能”的问题。HTTP 的发展史,本质上就是一部为了让浏览器更快地加载网页内容而不断优化的奋斗史。其核心目标始终是:
降低延迟、提高并发
。
一:HTTP/1.1
在 HTTP/1.1 之前,有一个叫 HTTP/1.0 的版本,每次请求资源(比如获取一个 CSS 文件、一个 JS 文件)都需要建立一个新的 TCP 连接,用完就关掉,效率极低。
1. 解决了什么核心痛点?
解决了 HTTP/1.0
频繁建立和断开 TCP 连接
所带来的巨大性能开销。TCP 连接的建立需要“三次握手”,这是一个耗时的过程。
2. 关键改进
•
长连接 (Persistent Connection):
这是 HTTP/1.1 最核心的改进。默认情况下,一个 TCP 连接可以被多个 HTTP 请求复用,不必每次都重新建立。
•
管道化 (Pipelining):
允许客户端在一个 TCP 连接上,连续发送多个请求,而不用等待前一个请求返回。
从“单人收银台”到“批量下单”
•
HTTP/1.0
:想象一个效率极低的收银台。你必须把一件商品放到传送带上,收银员扫码、结账,你付完钱后,才能再放上第二件商品。
•
HTTP/1.1 的长连接 + 管道化
:收银台升级了。你现在可以一次性把你购物车里所有的商品(请求)都放到传送带上,收银员(服务器)会按顺序逐个处理。你不用拿一件、等一次、再拿下一件。这大大减少了你和收银员之间的等待时间。
3. 留下的核心问题:队头阻塞 (Head-of-Line Blocking)
虽然管道化允许一次性发送所有请求,但服务器必须
按顺序
返回响应。如果第一个请求(比如一个很大的 JS 文件)处理得很慢,那么后面的所有请求(哪怕是一些很小的图片)即使已经处理完了,也必须排队等着,直到第一个请求的响应发送完毕。
传送带上的“大件商品”
就像在超市传送带上,你虽然把所有商品都放上去了,但如果排在最前面的是一个需要复杂包装的“大件商品”(慢请求),收银员就会卡在这里,后面所有“小商品”(快请求)都得等着,无法先被处理。这就是“队头阻塞”。
二:HTTP/2
HTTP/1.1 的队头阻塞问题成为了性能瓶颈。无论我们开多少个 TCP 连接(浏览器通常限制为 6-8 个),每个连接内部的阻塞问题依然存在。为了从根本上解决这个问题,HTTP/2 诞生了。
1. 解决了什么核心痛点?
解决了 HTTP/1.1 层的
队头阻塞
问题,大幅提高了单一连接的传输效率。
2. 关键改进
•
多路复用 (Multiplexing):
这是 HTTP/2 最革命性的改进。在一个 TCP 连接内,允许多个请求/响应双向、并行地传输,而不会互相阻塞。
•
二进制分帧 (Binary Framing):
将所有传输的信息(HTTP 消息)分割为更小的消息和帧,并采用二进制格式编码。这就像把大货物拆分成标准尺寸的小包裹,便于管理和运输。
•
头部压缩 (Header Compression):
使用 HPACK 算法压缩请求头,减少了每次请求的数据量。