HTTP/1.1 流水线和 HTTP/2 多路复用有什么区别?

What is the difference between HTTP/1.1 pipelining and HTTP/2 multiplexing?

是不是HTTP 1.1要求按请求顺序响应给客户端导致的head of line blocking问题?

如果每个请求花费的时间完全相等,那么不会有线头阻塞和 HTTP 1.1 流水线操作,并且会执行与 HTTP/2 多路复用相同的操作吗?

(假设 HTTP/2 请求中没有请求优先级,忽略 HTTP/2 的其他更改,例如 header 压缩、二进制等)

HTTP/1.1 流水线仍然要求请求按照请求的顺序完整返回。

HTTP/2 允许将请求响应分成块并以混合方式返回,从而避免队头阻塞。

此外 HTTP/1.1 流水线从未真正起飞,浏览器和服务器支持有限(参见:https://en.m.wikipedia.org/wiki/HTTP_pipelining)。

但是,是的,从理论上讲,它们是相似的,因此具有相似的性能优势。 HTTP/2 只是一个更好、功能更全面、支持更多的版本 - 以及您注意到的其他好处。

另请参阅我的回答,以深入讨论 HTTP/2 多路复用:

HTTP/1.1 无流水线: 在发出下一个请求之前,必须响应通过 TCP 连接的每个 HTTP 请求。

HTTP/1.1 with pipelining: 通过 TCP 连接的每个 HTTP 请求都可以立即发出,而无需等待前一个请求对 return 的响应。响应将以相同的顺序返回。

HTTP/2 多路复用: 通过 TCP 连接的每个 HTTP 请求都可以立即发出,而无需等待前一个响应返回。回复可能会以任何顺序返回。

我想详细说明一下,两者都提供了类似的性能改进。

然而,流水线(或双缓冲)受到有问题的代理和有时有问题的服务器的阻碍。所以浏览器停止支持它。

解决方案是使用全新的协议HTTP/2。这有一些额外的功能,例如乱序 return、header 压缩和服务器推送,但不清楚它们提供了多少改进。关键是bug。