是不是因为它要求按照请求的顺序向客户端做出响应,导致 HTTP 1.1 中的行头阻塞问题?
如果每个请求所用的时间完全相同,那么就不会有行首阻塞和 HTTP 1.1 流水线,并且会像 HTTP/2 多路复用一样执行?
(假设 HTTP/2 请求中没有请求优先级,而忽略 HTTP/2 的其他更改,例如标头压缩、二进制等)
是不是因为它要求按照请求的顺序向客户端做出响应,导致 HTTP 1.1 中的行头阻塞问题?
如果每个请求所用的时间完全相同,那么就不会有行首阻塞和 HTTP 1.1 流水线,并且会像 HTTP/2 多路复用一样执行?
(假设 HTTP/2 请求中没有请求优先级,而忽略 HTTP/2 的其他更改,例如标头压缩、二进制等)
没有流水线的 HTTP/1.1:必须响应 TCP 连接上的每个 HTTP 请求,然后才能发出下一个请求。
带有流水线的 HTTP/1.1:通过 TCP 连接的每个 HTTP 请求都可以立即发出,而无需等待前一个请求的响应返回。响应将以相同的顺序返回。
HTTP/2 多路复用:通过 TCP 连接的每个 HTTP 请求都可以立即发出,而无需等待先前的响应返回。响应可以按任何顺序返回。
HTTP/1.1 流水线仍然要求按照请求的顺序完整返回请求。
HTTP/2 允许将请求响应拆分为块并以混合方式返回,从而避免行头阻塞。
此外,HTTP/1.1 流水线从未真正起飞,浏览器和服务器支持有限(参见:https ://en.m.wikipedia.org/wiki/HTTP_pipelining )。
但是,是的,理论上,它们是相似的,因此具有相似的性能优势。HTTP/2 只是它的一个更好、功能更全、更受支持的版本——以及您提到的其他好处。
有关 HTTP/2 多路复用的更深入讨论,另请参阅我的答案:HTTP/2中的多路复用意味着什么
我想详细说明一下,两者都提供了类似的性能改进。
然而,流水线(或双缓冲)受到有问题的代理和有时有问题的服务器的阻碍。所以浏览器停止支持它。
解决方案是使用全新的协议 HTTP/2。这有一些额外的功能,例如乱序返回、标头压缩和服务器推送,但尚不清楚它们提供了多少改进。关键问题是错误。