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

时间:2011-09-05 15:58:02

标签: http browser tcp long-polling keep-alive

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

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

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

1 个答案:

答案 0 :(得分:7)

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

您应该阅读HTTP1.1以及有关持久连接的部分。

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

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

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