Javascript 当达到最大并发HTTP请求限制时,浏览器级别会发生什么情况?

Javascript 当达到最大并发HTTP请求限制时,浏览器级别会发生什么情况?,javascript,http,browser,Javascript,Http,Browser,我知道不同的浏览器有不同数量的并发连接,它们可以处理相同的主机名,但是当达到这个限制时,新的请求会发生什么呢 它是否会自动等待并稍后重试,或者我需要做些什么来帮助完成此过程 具体来说,如果这是一个通过JavaScript执行的XMLHttpRequest,而不仅仅是浏览器从标记中加载的一些资产,那么它会自动重试吗 我有一个客户端库,它发出多个API请求,有时它试图发送太多太快。发生这种情况时,我可以看到服务器端API错误,但这没有意义。如果并发限制停止了请求,那么它们就永远不会到达服务器,是吗

我知道不同的浏览器有不同数量的并发连接,它们可以处理相同的主机名,但是当达到这个限制时,新的请求会发生什么呢

它是否会自动等待并稍后重试,或者我需要做些什么来帮助完成此过程

具体来说,如果这是一个通过JavaScript执行的
XMLHttpRequest
,而不仅仅是浏览器从标记中加载的一些资产,那么它会自动重试吗

我有一个客户端库,它发出多个API请求,有时它试图发送太多太快。发生这种情况时,我可以看到服务器端API错误,但这没有意义。如果并发限制停止了请求,那么它们就永远不会到达服务器,是吗


更新:多亏了@joshstrike和更多的测试,我发现我的实际问题与浏览器中的并发HTTP请求限制无关。我不确定这些是否适用于JavaScript API调用。我正在进行的特定API调用中存在竞争条件,这导致了一个我最初误解的错误。

如果请求在服务器上超时,浏览器不会自行重试任何请求(无论出于何种原因,包括超出API限制)。有必要检查每个请求的状态,并以某种对应用程序和用户都合适的方式处理重试请求。对于失败的请求,您可以检查状态代码。但是,对于长时间挂起的请求,可能需要在请求后附加一个计数器,并在延迟后“取消”它。。。然后,如果返回的结果包含已取消的结果的编号,则如果已返回较新的结果,则忽略该结果。这通常发生在长轮询应用程序中,该应用程序不断命中服务器,并且不知道某些ping是否会稍后返回或根本不会返回。

如果请求在服务器上超时,浏览器不会自行重试任何请求(无论出于何种原因,包括超出API限制)。有必要检查每个请求的状态,并以某种对应用程序和用户都合适的方式处理重试请求。对于失败的请求,您可以检查状态代码。但是,对于长时间挂起的请求,可能需要在请求后附加一个计数器,并在延迟后“取消”它。。。然后,如果返回的结果包含已取消的结果的编号,则如果已返回较新的结果,则忽略该结果。这通常发生在长轮询应用程序中,该应用程序不断命中服务器,并且不知道某些ping是否会稍后返回或根本不会返回。

浏览器只会在某些内部队列中对超出特定限制的请求进行排队,并在活动请求结束且“插槽”打开时对其进行处理。这与“重试”无关,请求不会被拒绝,它只是等待执行。如果您看到服务器端API错误,这意味着请求实际上是向服务器发出的,因此与传出请求的内部浏览器限制无关……但它还会对XMLHttpRequest进行排队吗?在最终加载图像或样式表之前等待一段时间是一回事,我只是不确定排队是否会发生那么深。浏览器只会在某个内部队列中对超过某个限制的请求进行排队,并在活动请求结束和“插槽”打开时对其进行处理。这与“重试”无关,请求不会被拒绝,它只是等待执行。如果您看到服务器端API错误,这意味着请求实际上是向服务器发出的,因此与传出请求的内部浏览器限制无关……但它还会对XMLHttpRequest进行排队吗?在最终加载图像或样式表之前等待一段时间是一回事,我只是不确定队列是否会发生那么深。我将不得不构建一个特定的测试平台,看看是否可以捕获错误。这不可能是HTTP错误代码,因为它们都必须来自服务器连接。最后,我将修改API包装库,我们使用它对请求进行内部排队,并仅在发送最后一个请求时调用它们。如果这些是异步调用,那么我不知道在浏览器级别有任何限制。如果您的通话必须按顺序进行并按顺序返回,则您必须等待上一次通话,或者继续通话,如果不再相关,则放弃通话。有趣。您是否建议限制适用于通过带有src的HTML标记加载资产,而不适用于JavaScript XMLHttpRequests?我编辑了我的帖子,以确认我发现了实际问题,并且我认为API请求不计入此API限制(我的测试连续快速运行了500个API请求,没有问题)。谢谢你给我指明了正确的方向!我必须构建一个特定的测试平台,看看是否能够捕获错误。这不可能是HTTP错误代码,因为它们都必须来自服务器连接。最后,我将修改API包装库,我们使用它对请求进行内部排队,并仅在发送最后一个请求时调用它们。如果这些是异步调用,那么我不知道在浏览器级别有任何限制。如果您的通话必须按顺序进行并按顺序返回,则您必须等待上一次通话,或者继续通话,如果不再相关,则放弃通话。有趣。您是否建议限制适用于通过带有src的HTML标记加载资产,而不适用于JavaScript XMLHttpRequests?我编辑了我的帖子,以确认我发现了实际问题,并且我认为API请求不计入此API限制(我的测试连续快速运行了500个API请求,没有问题)。谢谢你给我指明了正确的方向!