我正在创建一些到HTTP服务器的挂起连接(comet,反向AJAX等)。它工作正常,但我看到浏览器只允许两个挂起连接到一个给定的域同时。因此,如果用户在浏览器的Tab1中查看我的网站,然后也尝试在Tab2中加载它,他们已经用完了允许的两个连接到我的网站。

我想我可以做一些通配符域的事情,在那里我有我的HTTP服务器解析任何地址到我的网站,如:

*.example.com/webapp  -> 192.0.2.1 (the actual ip of my server)

so:

a.example.com/webapp
b.example.com/webapp
c.example.com/webapp

所有仍然指向(www.example.com/webapp),但浏览器认为他们不同的域,所以我没有遇到2连接限制。这是真的吗?

即使这是真的,每个浏览器在所有域上的活动连接数量有限制吗?假设我使用上面的方案-例如Firefox在任何给定时间只允许24个并行连接吗?喜欢的东西:

1) a.example.com/webapp
2) www.download.example/hugefile.zip
3) b.example.com/webapp
4) c.example.com/webapp
...
24) x.example.com/webapp
25) // Error - all 24 possible connections currently in use!

我只是选择了24个连接/Firefox作为例子。


当前回答

不同的浏览器对每个主机名的最大连接数有不同的限制;你可以在http://www.browserscope.org/?category=network上找到确切的数字 这里有一篇关于网络性能专家Steve Souders关于连接限制的有趣文章http://www.stevesouders.com/blog/2008/03/20/roundup-on-parallel-connections/

其他回答

这个问题没有明确的答案,因为每个浏览器都有自己的配置,而且这个配置可能会改变。如果你在互联网上搜索,你可以找到改变这个限制的方法(通常它们被称为“性能增强方法”),如果你的网站需要这样做,建议你的用户这样做可能是值得的。

2个并发请求是许多浏览器设计的一部分。有一个标准是“好的http客户端”有意遵守的。看看这个RFC,看看为什么。

不同的浏览器对每个主机名的最大连接数有不同的限制;你可以在http://www.browserscope.org/?category=network上找到确切的数字 这里有一篇关于网络性能专家Steve Souders关于连接限制的有趣文章http://www.stevesouders.com/blog/2008/03/20/roundup-on-parallel-connections/

查看GNU/Linux (Ubuntu)上Firefox 33上的about:config,并搜索连接,我发现:

network.http。最大连接:256

这很可能回答了每个浏览器在所有域上的活动连接数量是否有任何限制

network.http。max-persistent-connections-per-proxy: 32 network.http。max-persistent-connections-per-server: 6

跳过两个属性…

network.websocket。最大连接:200

(有趣的是,它们似乎不受每个服务器的限制,但默认值低于全局HTTP连接)

我的理解是连接限制在客户端是不可更改的。必须在服务器上更改连接限制才能生效。默认情况下,许多服务器只允许每个客户端有2个连接。

客户端不是浏览器,而是发出TCP/IP请求的客户端机器。

为了更清楚地看到效果,可以使用JMeter之类的工具向服务器主机发起一系列web服务调用——它将接受前两个,直到其中一个完成才接受另一个。令人惊讶的是,对于SOA商店来说,这是至关重要的,但几乎没有人真正意识到这一点。