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

Html 浏览器中的最大并行http连接数?,html,http,web-applications,persistent-connection,web-performance,Html,Http,Web Applications,Persistent Connection,Web Performance,我正在创建一些到HTTP服务器的挂起连接(comet、ReverseAJAX等)。它工作正常,但我看到浏览器只允许同时连接到给定域的两个挂起连接。因此,如果用户在浏览器的Tab1中查看我的网站,然后又尝试将其加载到Tab2中,那么他们已经用完了与我的网站的两个允许连接 我想我可以做一些通配符域的事情,让我的http服务器解析我站点的任何地址,如: *.example.com/webapp -> 192.0.2.1 (the actual ip of my server) 因此: 所有的

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

我想我可以做一些通配符域的事情,让我的http服务器解析我站点的任何地址,如:

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

所有的都指向(
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作为一个例子。

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

  • 是的,通配符域将适用于您
  • 不知道任何连接限制。限制(如果有)将是特定于浏览器的

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

    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
    
    限制是每个服务器/代理,因此您的通配符方案将起作用


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

    这两个并发请求是许多浏览器设计的有意部分。有一个标准是“好的http客户机”故意遵守的。查看原因。

    Firefox将该数字存储在此设置中(您可以在
    关于:config
    中找到它):
    网络.http.每台服务器的最大连接数


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

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

    各种浏览器对每个主机名的最大连接有各种限制;你可以在网站上找到确切的数字 这里有一篇关于连接限制的有趣文章,来自web性能专家Steve Souders

    HTTP/1.1 资料来源:

    HTTP/2(SPDY)
    查看GNU/Linux(Ubuntu)上Firefox33上的
    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连接的默认值)

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

    资料来源:

    注意: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
      的回调中,+
      requestAnimationFrame
      然后
    • [^note4]:其中最后6项是后续行动(2、4、6项分别在0.5s、1s和1.5s时提供)

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

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


    要非常清楚地看到效果,请使用JMeter之类的工具向您的服务器主机发出一系列web服务调用—它将接受前两个,并且在完成其中一个之前不会接受另一个。令人惊奇的是,对于SOA商店来说,这是至关重要的,但几乎没有人真正意识到这一点。

    我很惊讶。HTTP 1.1 RFC不是说将每个服务器的持久连接限制为2个吗?是的。最近的浏览器不再符合要求。引用这些限制?每个源站的WebSocket连接是否有任何限制?HTTP 1.1 RFC中已删除了每个服务器2个连接的限制:我同意,可能最好遵循该标准。以下标准很好,但应用常识并参与修改这些规则也是如此:请参阅Good point@JulianReschke,但对于HTTP/2,不再要求每个主机有大量连接。请参阅:请参阅是,它被称为,这在HTTP/2时代是一种过时的策略。这里的解决方案是,对于所有选项卡更新,只有一个挂起的连接。当一个选项卡打开时,该选项卡的更新请求被发送到服务器,该选项卡侦听主挂起连接上的任何更新,并且只拾取该更新
    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
    
    Multiplexed support(one single TCP connection for all requests)
    
     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
    
    | 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]                  |