浏览器中的最大并行HTTP连接数?


465

我正在创建到HTTP服务器的一些挂起的连接(comet,反向ajax等)。一切正常,但我看到浏览器仅允许同时暂停到给定域的两个连接。因此,如果用户正在浏览器的Tab1中查看我的网站,然后又尝试将其加载到Tab2中,则他们已经用完了两个允许访问我的网站的连接。

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

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

所以:

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为例进行说明。



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

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

Answers:


418

每个服务器/代理的默认默认同时持久连接数:

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
Chrome:     6

限制是每个服务器/代理,因此您的通配符方案将起作用。

仅供参考:这与HTTP 1.1特别相关;其他协议具有单独的关注点和限制(即SPDY,TLS,HTTP 2)。


41
我很惊讶。HTTP 1.1 RFC不是说将每个服务器的永久连接限制为2个吗?
阿德里安·麦卡锡

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

38
这些限制的引用?
AJ。

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

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

195

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)


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

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

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

116
 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可用)

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

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

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


14

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

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


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

3
network.http.max-persistent-connections-per-server实际上是
莱赫Osiński

9

在页面上进行测试时,我看到了以下行为:

Safari 4: 6  
Chrome 6: 7  
FF 4: 6

编辑:似乎firefox 4应该能够进行15个连接,但这不是我观察到的行为。


哪个版本的Chrome?6还是5?
赫斯基

我认为现在是6点,但我在开发频道上,而且是前一阵子。无提示更新意味着我必须一直检查。
杰斯罗·拉尔森

5

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


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

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

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

5

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

network.http.max-connections:256

这可能是因为在所有域中每个浏览器的活动连接数没有限制

网络。http.max-persistent-connections-per-proxy:32

网络.http.max-persistent-connections-per-server:6

跳过了两个属性...

network.websocket.max连接数:200

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


2

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


2

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

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

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


1

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


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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.