RFC 2616 section 8.1.2.2声明:
支持持久连接的客户端可以“管道化”其请求(即,在不等待每个响应的情况下发送多个请求)。服务器必须将其响应发送到的请求以接收请求。
串行响应通常弊大于利,因为串行响应实际上require the server to do more processing并否定了流水线技术带来的性能优势。
例如,如果HTTP客户端请求文件1.jpg,2.jpg,3.jpg,4.jpg和5.jpg,那么在1.jpg之前返回3.jpg无关紧要,或者如果4.jpg在3.jpg之前返回。客户只需按照任何顺序即可获得响应。
HTTP客户端如何获得流水线操作的好处,同时又无法支付响应排队的缺点?
答案 0 :(得分:2)
客户端不能绕过HOL排队,因为它是RFC 2616的一部分。流水线技术的唯一好处(在我看来)是极其具体和狭窄的情况。考虑:
R 1 费用 = Request A
处理费用。
R 2 成本 = Request B
处理成本。
TCP cost =协商新TCP连接的成本。
因此,在以下特定情况下使用流水线技术是可行的:
R 1 成本 ≥ R 2 成本 ≤ TCP cost
请求比先前的请求更昂贵,并且比协商新的TCP连接更便宜?不经常。我想补充一点,Websockets(到目前为止)是一个更有趣和更合适的解决方案(就并行后端处理而言)。
答案 1 :(得分:1)
它不能(在HTTP / 1.1中)。它可能是HTTP的未来版本。
答案 2 :(得分:1)
HTTP标头中没有默认机制来标识哪个响应与哪个请求匹配。已知响应是针对特定请求的响应,因为它的接收顺序。如果您要求1.jpg,2.jpg,3.jpg,4.jpg和5.jpg并以任何顺序发送回复,您将不知道哪一个是哪个。
(你可以在客户端和服务器头中实现自己的标记,但是你肯定不符合协议,大多数实现都不知道如何处理它。你必须做一些处理来映射,也可能否定这种并行实现的预期好处。)
您从现有HTTP管道机制获得的主要好处是:
其中一些好处也可以通过更现代的网络浏览器技术获得,其中多个请求可以单独发送,页面的某些部分可以逐步更新(通过AJAX)。