繁体   English   中英

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

[英]What happens at the browser level when a max concurrent HTTP request limit is hit?

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

它会自动等待并稍后重试,还是我需要做些什么来帮助这个过程?

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

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

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

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

当达到 Chrome 的限制时,它会暂停更多请求。 一旦一个请求得到响应,浏览器就会发送下一个请求。 在 Chrome 上,我的限制是六个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM