首页 > 解决方案 > 我可以在 HTTP 2 上做类似于流水线的事情吗?

问题描述

流水线是 HTTP/1.1 中的一种技术,在该技术中,多个请求在保活连接上一次发送而无需等待响应。然后服务器按顺序返回响应,而无需等待发送响应和接收下一个请求之间的往返时间。

HTTP/2 添加了一个称为多路复用的功能,它同样允许客户端一次发送多个请求。但是,在这种情况下,服务器可以一次发送所有响应。

在没有服务器控制的情况下,我可以在使用 HTTP/2 时实现类似于流水线的功能(即一次按顺序接收响应,并且响应之间没有延迟)吗?

这在下载许多大文件时很有用,没有太多可用内存来缓冲几个部分完成的响应。

标签: httphttp2http-pipelining

解决方案


在没有服务器控制的情况下,我可以在使用 HTTP/2 时实现类似于流水线的功能(即一次按顺序接收响应,并且响应之间没有延迟)吗?

不,你不能,除非服务器合作(例如,服务器可以配置为按顺序处理请求或类似的东西)。

作为旁注,虽然在 HTTP/1.1 中允许请求管道,但它一直被认为是一个坏主意,因此与所有主要实现无关(即浏览器不这样做,服务器并不真正支持它,等等.)。主要问题是错误处理和错误的代理服务器。

HTTP/2 允许客户端设置请求的优先级,以便按优先级顺序处理请求。但是,此功能是可选的,服务器可能不会实现它,因此您需要再次仔细选择/配置服务器以获得您想要的行为。

如果您可以稍微控制服务器端,对于 HTTP/1.1 和 HTTP/2,更好的解决方案是在单个请求中向服务器询问所有文件,并让服务器回复多部分响应。


推荐阅读