我正在创建一些到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作为示例。

评论

另请参见流行的浏览器中允许多少个并发AJAX(XmlHttpRequest)请求?

是的,这称为域分片,这是HTTP / 2时代的过时策略。

解决方案是所有选项卡更新仅具有一个暂停的连接。打开选项卡时,该选项卡的更新请求将发送到服务器,并且该选项卡在主挂起的连接上侦听任何更新,并且仅接收其感兴趣的更新。我知道这不是您所需要的在问,但认为对某人可能有用。 :-)

#1 楼

每个服务器/代理的默认默认同时持久连接数:
Firefox 2:  2
Firefox 3+: 6
Opera 9.26: 4
Opera 12:   6
Safari 3:   4
Safari 5:   6
IE 7:       2
IE 8:       6
IE 10:      8
Edge:       6
Chrome:     6

限制是每个服务器/代理,因此您的通配符方案将起作用。
FYI:这与HTTP 1.1特别相关;其他协议具有单独的关注点和局限性(即SPDY,TLS,HTTP 2)。

评论


我很惊讶。 HTTP 1.1 RFC是否没有说将每个服务器的永久连接限制为2个?

–阿德里安·麦卡锡(Adrian McCarthy)
2010-2-5在22:11

是的,它确实。最近的浏览器不再兼容。

– Alsciende
2010-2-8在10:30

这些限制的引用?

– AJ。
2011年5月15日在22:13

每个来源的WebSockets连接是否有限制?

–米塔尔
13年2月9日在4:17

每个服务器2个连接的限制已从HTTP 1.1 RFC中删除:evertpot.com/http-11-updated

–佛罗里达冬季
2014年9月26日在7:29

#2 楼

HTTP / 1.1

IE 6 and 7:      2
IE 8:            6
IE 9:            6
IE 10:           8
IE 11:           8
Firefox 2:       2
Firefox 3:       6
Firefox 4 to 46: 6
Opera 9.63:      4
Opera 10:        8
Opera 11 and 12: 6
Chrome 1 and 2:  6
Chrome 3:        4
Chrome 4 to 23:  6
Safari 3 and 4:  4


源:http://p2p.wrox.com/book-professional-website-performance-optimizing-front-end-back-end- 705 /

HTTP / 2(SPDY)

Multiplexed support(one single TCP connection for all requests)


评论



如果在操作系统级别将浏览器限制为较低的值,浏览器是否可以真正使用这些较高的值?浏览器可以覆盖操作系统设置吗?像在Windows中一样,您很少有注册表设置(MaxConnectionsPerServer和MaxConnectionsPer1_0Server)来控制每个服务器的最大连接,如本文所述:stackoverflow.com/questions/2960056/…

– RBT
16年6月19日在2:53

原来这是一个.NET编程特定问题。无论如何,第三方浏览器都实现了自己的HTTP支持,因此不会受到Windows限制的影响。

–胸骨
19年5月13日在5:27



因此,由于Web浏览器通常在每个主机上打开几个TCP(〜6个并行)连接以使用HTTP 1.1更快地加载不同的资源,因此对于HTTP / 2而言,情况不再如此,因为多路复用在一个TCP上获得了相同的速度连接?

– Stefan
3月6日10:31

#3 楼

 BrowserVersion | ConnectionsPerHostname | MaxConnections
----------------------------------------------------------
 Chrome34/32    | 6                      | 10
 IE9            | 6                      | 35
 IE10           | 8                      | 17
 IE11           | 13                     | 17
 Firefox27/26   | 6                      | 17
 Safari7.0.1    | 6                      | 17
 Android4       | 6                      | 17
 ChromeMobile18 | 6                      | 16
 IE Mobile9     | 6                      | 60


第一个值是ConnectionsPerHostname,第二个值是MaxConnections。

来源:http://www.browserscope.org/?category=network&v=top

注意:ConnectionsPerHostname是浏览器将向同一域发出的并发http请求的最大数目。
要增加并发连接的数量,可以在不同域中托管资源(例如图片)。但是,您不能超过
MaxConnections,即在所有域中浏览器总共可以打开的最大连接数。

2020更新

每个浏览器的并行连接数

| Browser              | Connections per Domain         | Max Connections                |
| -------------------- | ------------------------------ | ------------------------------ |
| Chrome 81            | 6 [^note1]                     | 256[^note2]                    |
| Edge 18              | *same as Internet Explorer 11* | *same as Internet Explorer 11* |
| Firefox 68           | 9 [^note1] or 6 [^note3]       | 1000+[^note2]                  |
| Internet Explorer 11 | 12 [^note4]                    | 1000+[^note2]                  |
| Safari 13            | 6 [^note1]                     | 1000+[^note2]                  |



[^ note1]:已测试72个请求,1个域(127.0.0.1)
[^ note2]:已测试1002个请求,每个域6个请求* 167个域(127.0.0。*)
[^ note3]:何时在异步上下文中调用,例如在setTimeout,+ requestAnimationFramethen的回调中...
[^ note4]:后6个为后续跟踪(2、4、6分别以0.5s,1s,1.5s可用)


评论


从50+版本开始,Chrome现在最多支持17个“最大连接数”,可与Firefox和Safari媲美。

–扎夫-本·杜吉德
17年3月13日在17:15

我认为这个答案有点误导。主机和域完全不同。 ConnectionsPerHostname表示每个子域。因此,如果有2个子域,则使用其他连接;如果没有子域,则表示每个域。

–唐·迪兰加(Don Dilanga)
17-10-6在19:32



每个chrome标签是否有此限制?还是单个Chrome实例中的所有标签页?还是Chrome所有实例的所有标签页?

– AshD
18年5月14日在21:28



网站是否可能需要太多资源,以至于同时使用所有81个连接?我的意思是,使用同一台服务器,网站可能需要超过81个资源,但这并不意味着它需要81个连接才能有效地获取信息。

– Sushil Lakra
8月29日6:21

任何人都可以使用browserscope的替代方法来进行测试,好像不再托管工具。

–felickz
10月30日15:58

#4 楼

各种浏览器对每个主机名的最大连接数都有不同的限制。您可以在http://www.browserscope.org/?category=network
上找到确切的数字,这是Web性能专家Steve Souders撰写的有关连接限制的有趣文章http://www.stevesouders.com/博客/ 2008/03/20 / roundup-on-parallel-connections /

评论


任何人都可以使用browserscope的替代方法来进行测试,好像不再托管工具。

–felickz
10月30日15:57

#5 楼

Firefox在该设置中存储该数字(您在about:config中找到它):network.http.max-connections-per-server

要获得最大连接数,Firefox将其存储在此设置中:network.http.max-connections

评论


network.http.max-connections默认情况下为900,这与并行连接的最大数目无关,通过测试版本52,并行连接的最大数目仍为17。

–user2867288
17年4月9日在4:41

这是网络。http.max-persistent-connections-per-server实际上

–莱希·奥辛斯基(LechOsiński)
17 Dec 20 '14:12



#6 楼

2个并发请求是许多浏览器设计的有意部分。有一个标准是“好的http客户端”有意遵守的。请查看此RFC,了解原因。

评论


我同意,最好遵循该标准。

–palswim
2010年8月27日在16:35

遵循标准是好的,但应用常识并参与修订也是如此:请参阅trac.tools.ietf.org/wg/httpbis/trac/ticket/131

–朱利安·雷施克(Julian Reschke)
11年5月16日在7:41

@JulianReschke很不错,但是使用HTTP / 2不再需要每个主机具有大量连接。参见:http2.github.io/faq/#why-just-one-tcp-connection

–大卫
16 Mar 23 '16 at 20:13

#7 楼

在GNU / Linux(Ubuntu)上的Firefox 33上查看about:config,然后搜索connections,我发现:

network.http.max-connections:256

这很可能会回答该部分对跨所有域的每个浏览器的活动连接数没有任何限制。

网络。http.max-persistent-connections-per-proxy:32
网络.http.max -每个服务器的持久连接数:6

跳过了两个属性...

network.websocket.max-connections:200

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

#8 楼

请注意,将浏览器的每台服务器的最大连接数增加到过多的数量(如某些站点所建议的那样)可以并且确实将其他用户锁定在具有托管计划的小型站点之外,该计划限制了服务器上同时进行的总连接数。

#9 楼

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

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

要非常清楚地看到效果,请使用JMeter之类的功能来触发对服务器主机的一堆Web服务调用-它会接受前两个,并且直到两个中的一个完成后才会接受另一个。令人惊奇的是,对于SOA商店来说,这很关键,但几乎没有人真正意识到这一点。

#10 楼

没有确切的答案,因为每个浏览器对此都有自己的配置,并且此配置可能会更改。如果您在Internet上搜索,则可以找到更改此限制的方法(通常将它们称为“性能增强方法”。)如果您的网站需要这样做,则建议用户建议这样做。

评论


我再说一遍,这不是在浏览器上可配置的-也许可以,但是仍然没有任何效果。是服务器在每个客户端上强制2个连接,而不是客户端或客户端上的浏览器。通过增加浏览器上的连接数,您可以与更多不同的服务器建立2条连接(即您可以一次从多台服务器下载文件,这没有问题)。但是,您不能同时从任何一台服务器下载两个以上的文件。为此,必须修改服务器。

–罗德尼·巴尔巴蒂(Rodney P. Barbati)
15/09/30在20:53



当然,这个答案已经过时了,但是从撰写之日起它是准确的。首先,服务器很少会显着限制每个IP的连接,所以我认为您错了。其次,2009年,IE 7仍然存在,每个主机名最多具有两个连接。可以通过系统注册表进行配置。即使在今天,浏览器也有限制,而且它们通常是可配置的,但是这些限制远高于当时的限制。无论如何,随着SPDY / HTTP2的出现,由于服务器和浏览器实现了新协议,这已成为一个较小的问题。

– Blixt
2015年10月1日,0:25

#11 楼


是的,通配符域将为您工作。
不知道连接有任何限制。限制是否有特定于浏览器的内容。