从单个浏览器排序HTTP调用

时间:2018-05-13 04:08:20

标签: ajax http networking browser concurrency

我们的应用程序将多个重叠的AJAX调用发送到单个服务器。我想知道是否有保证的交货单。

请注意,与此question不同,我并未询问有关序列化客户端中的依赖项的信息。客户端按顺序发送请求R1,R2,R3,而不等待响应,并且我询问服务器上的交付顺序(让我们忽略负载平衡)。

请求是否以相同的顺序到达

  • over HTTP / 1.1
  • over HTTP / 2?

1 个答案:

答案 0 :(得分:1)

据我所知,XMLHttpRequest spec没有做出这样的保证。

通常,浏览器倾向于将请求的隐式排序视为问题(简称为head-of-line blocking),并尽量避免使用。

使用HTTP / 1.1,为避免线头阻塞,浏览器会打开multiple TCP connections to a single origin。如果R1和R2在不同的TCP连接上发送,则没有任何东西可以保证它们的传送顺序,因为任何一个都可能受到任意网络延迟的影响。

使用HTTP / 2,浏览器可能会打开just one TCP connection,这意味着请求将按照浏览器发送的顺序到达服务器。因此,排序可能使用HTTP / 2保存事实上的。 (显然,即使它确实如此,它只能达到服务器解析这些请求并开始为它们提供服务的程度。例如,如果您的HTTP / 2连接被nginx终止,它将从一个连接向多个工作者发送请求。换句话说,在实践中“忽略负载平衡”可能很棘手。)

但是,再次,这被视为带有HTTP / 2的问题,并且正在以QUIC的形式开发解决方案,该解决方案基于UDP,因此失去了排序再次在多路复用连接之间。