HTTP 1.x 缺少什么以允许像 HTTP 2 那样的多路复用

What does HTTP 1.x lack to allow multiplexing like HTTP 2

我知道 HTTP 1.1 支持流水线,其中可以通过单个连接发送多个请求,但服务器需要按照从客户端发送的相同顺序处理这些请求。

此外,您可以从客户端并行发出多个 HTTP 请求,但每个请求都需要一个单独的 TCP 连接。

由于多路复用,HTTP 2 还支持通过单个 TCP 连接发出多个请求,因此不存在 HTTP 1.1 维护序列的限制。

如果通过 http 1.x 并行发送多个请求,则效果不佳。这是什么,http 1.x 不提供,因为无法完成像多路复用这样的 http 2。

HTTP/1.1 于 1999 年标准化,它只是 HTTP/1.0(标准化 1996 年)的一个小演变,基本上添加了对 HTTP 流水线、HTTP 分块编码(内容长度不预先知道)和 HTTP 默认情况下保持活动状态。 1999 年的互联网与今天截然不同(因为再过 20 年它可能会大不相同)。当时 Javascript 只是一个奇特的工具,可以在页面上滚动一些文本(即新闻行情等),没有 Ajax 和客户端和整体的动态更新部分Web 2.0 的想法还很遥远。

换句话说:此时根本没有迫切需要有一个支持多路复用的更复杂的协议。 20 年后再问为什么 HTTP/2 或 HTTP/3 没有在 2039 年拥有您需要的所有功能。

因为请求-响应对在HTTP/1中没有标识符,所以当服务器或客户端收到部分请求或响应时,他们不知道它属于哪个请求-响应对.

因此请求和响应需要按顺序完整发送和接收。

HTTP/2 具有多路复用,其中每一对(或 "session")都有一个唯一的标识符,它与每个 "frame" 一起发送,因此部分请求或响应的接收者知道哪个它属于的一对。