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