HTTP 行首阻塞:为啥响应必须按顺序返回

Posted

技术标签:

【中文标题】HTTP 行首阻塞:为啥响应必须按顺序返回【英文标题】:HTTP Head of line blocking: Why responses must come back in orderHTTP 行首阻塞:为什么响应必须按顺序返回 【发布时间】:2021-04-12 07:12:21 【问题描述】:

行头阻塞(在 HTTP/1.1 术语中)通常是指每个客户端与服务器的 TCP 连接数量有限(通常每个主机名 6 个连接)并通过其中一个连接发出新请求必须等待同一连接上的前一个请求完成,然后客户端才能发出新请求。

HTTP/1.1 引入了一个名为“Pipelining”的功能,它允许客户端通过同一个 TCP 连接发送多个 HTTP 请求。然而,HTTP/1.1 仍然要求响应按顺序到达,因此它并没有真正解决 HOL 问题,并且截至今天它还没有被广泛采用。

我的问题是:在 HTTP 管道中,为什么响应必须按顺序返回?

【问题讨论】:

【参考方案1】:

因为响应中没有标识符表明它属于哪个请求。

HTTP/2 使用 stream identifiers 解决了这个问题。

【讨论】:

【参考方案2】:

HTTP/1.1 协议无法将请求与响应链接起来,除了顺序。如果响应可能乱序返回,则客户端无法知道哪个响应是对哪个请求的响应。

值得注意的是,流水线现在几乎是一个死功能,并且已从大多数流行的客户端中删除。如果您需要这样的功能,请查看确实允许乱序响应的 HTTP/2。

【讨论】:

以上是关于HTTP 行首阻塞:为啥响应必须按顺序返回的主要内容,如果未能解决你的问题,请参考以下文章

promise执行顺序

为啥 Scheme `filter` 表单不能“按顺序”处理列表元素?

按顺序附加异步响应 swit 3

为啥python中字典的keys()以不同的顺序返回? [复制]

使用 ExecutorService 控制任务执行顺序

我必须找到列的模式。当两个值的模式相同并且python按字母顺序返回我时会出现问题