浏览器中最大并行http连接?

时间:2009-06-12 07:23:53

标签: html http web-applications persistent-connection web-performance

我正在创建一些到HTTP服务器的挂起连接(彗星,反向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作为示例。

12 个答案:

答案 0 :(得分:384)

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

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)。

答案 1 :(得分:187)

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)

答案 2 :(得分:91)

BrowserVersion | ConnectionsPerHostname | MaxConnections

  1. Chrome34 / 32 6 10
  2. IE9 6 35
  3. IE10 8 17
  4. IE11 13 17
  5. Firefox27 / 26 6 17
  6. Safari7.0.1 6 17
  7. Android4 6 17
  8. ChromeMobile18 6 16
  9. IE Mobile9 6 60
  10. 第一个值是 ConnectionsPerHostname ,第二个值是 MaxConnections

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

    注意: ConnectionsPerHostname 是浏览器将对同一个域进行的最大并发http请求数。 为了增加并发连接的数量,可以在不同的域中托管资源(例如图像)。但是,你不能超过 MaxConnections ,浏览器将在所有域中打开的最大连接数。

答案 3 :(得分:44)

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

的连接限制的有趣文章

答案 4 :(得分:14)

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

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

答案 5 :(得分:8)

在页面上进行测试我看到了这种行为:

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

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

答案 6 :(得分:5)

2个并发请求是许多浏览器设计的有意内容。有一个标准,“良好的http客户端”是故意坚持的。查看this RFC以查看原因。

答案 7 :(得分:4)

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

  

network.http.max-connections:256

可能会回答部分对所有域中每个浏览器的活动连接数有任何限制

  

network.http.max-persistent-connections-per-proxy:32

     

network.http.max-persistent-connections-per-server:6

跳过了两个属性......

  

network.websocket.max-connections:200

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

答案 8 :(得分:1)

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

答案 9 :(得分:1)

  1. 是的,通配符域适合您。
  2. 不知道连接有任何限制。限制,如果有任何特定浏览器。

答案 10 :(得分:1)

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

答案 11 :(得分:1)

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

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

要非常清楚地看到效果,请使用JMeter之类的东西来启动对服务器主机的大量Web服务调用 - 它将接受前两个,并且在完成两个中的一个之前不会接受另一个。令人惊奇的是,对于SOA商店来说,这是至关重要的,但几乎没有人真正意识到这一点。