在什么情况下我的浏览器会尝试为多个请求重用TCP连接?

Mar*_*ark 12 browser tcp http keep-alive long-polling

我正在使用Firefox,但我想知道浏览器一般如何决定这一点.

似乎当我在很短的时间内两次访问同一个URL时,我的浏览器会尝试为两个请求重新使用TCP相同的连接(这称为keep-alive).但是,当我访问两个不同的URL(但仍由同一服务器提供服务)时,浏览器有时会决定为每个请求打开一个新连接.显然,浏览器不使用每个URL的一个连接策略.

我问这个是因为我正在尝试实现一个使用长轮询的Web服务.我可以想象用户可能希望在同一浏览器的多个选项卡中打开此服务.但是,使用keep-alive,第二个长轮询请求在第一个完成之前不会被发送(至少在Firefox中),因为浏览器正试图将它们都推到同一个套接字中,这是我没想到的设计了这项服务.即使浏览器实现了管道衬里,在我响应第一个请求之前也无法响应第二个请求,因为HTTP要求我按顺序完成响应.

Cra*_*lus 7

使用HTTP/1.1时,默认情况下,TCP连接保持打开状态以供重用.这比为每个请求启动新连接提供更好的性能.连接可以重复使用,任何一方都可以随时关闭连接.

您应该阅读HTTP1.1和持久连接的部分.

在您的情况下,它甚至不使用HTTP流水线(没有广泛支持),因为下一个请求是第一个请求响应之后发送的.

浏览器有一个连接池,并按主机名重用它.一般来说,浏览器不应该为多个主机名重用单个连接,即使这些主机名实际上解析为相同的IP地址.

大多数浏览器允许用户配置或覆盖每个服务器的持久连接数; 大多数现代浏览器默认为六个.如果Firefox 确实阻止了第二个请求,因为已经有一个活动连接,这是Firefox中的一个错误,应该在他们的错误跟踪系统中存档.但如果存在这样的错误,我认为你会看到许多网站被破坏.