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

437 html web-applications http persistent-connection web-performance

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

我想我可以做一些通配域的东西,我有我的http服务器解析我的网站的任何地址,如:

*.example.com/webapp  -> 192.0.2.1 (the actual ip of my server)
Run Code Online (Sandbox Code Playgroud)

所以:

a.example.com/webapp
b.example.com/webapp
c.example.com/webapp
Run Code Online (Sandbox Code Playgroud)

所有仍然指向(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!
Run Code Online (Sandbox Code Playgroud)

我刚刚选择了24个连接/ Firefox作为示例.

Als*_*nde 398

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

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
Run Code Online (Sandbox Code Playgroud)

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

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

  • 是的,它确实.最近的浏览器不再符合. (51认同)
  • 我很惊讶.HTTP 1.1 RFC不是说将每个服务器的持久连接限制为2个吗? (37认同)
  • 这些限制的引用? (36认同)
  • 每个来源的WebSockets连接是否有任何限制? (19认同)
  • http://www.stevesouders.com/blog/2008/03/20/roundup-on-parallel-connections/ (15认同)
  • 每个服务器的2个连接的限制已从HTTP 1.1 RFC中删除:http://evertpot.com/http-11-updated/ (10认同)
  • @Alsciende - 这不是技术上的每个*域*而不是每个*服务器/代理*?(多个域可能会解析为相同的服务器,但浏览器仍然允许额外的连接) (9认同)
  • 具有不同端口的同一域上的两个请求是否会计为域的同时连接? (3认同)
  • 尝试,他们是... http://www.theregister.co.uk/2015/04/17/google_quic_test_results/ (3认同)
  • @Adrian McCarthy:IE8明确违反了该标准,主要是因为它希望更快地加载页面.Firefox早些时候发现了这一点. (2认同)
  • @Alsciende 公平地说,规范说“不应该”,而不是“不能”。“单用户客户端不应与任何服务器或代理保持超过 2 个连接。” 来源:第 8.1.4 节实际注意事项 @ https://tools.ietf.org/html/rfc2616#page-44 (2认同)
  • Chrome 引用:https://code.google.com/p/chromium/codesearch#search/&q=kMaxNumDelayableRequestsPerHost&sq=package:chromium&type=cs (2认同)
  • 任何人都可以确认限制是每个域*?定义它的标准在哪里?(我知道,浏览器打破它,但我想看看;也许他们只忽略了数字).我希望人们停止使用模糊的表达式"每服务器/代理"(它是ip?它是域吗?),我想知道这种令人讨厌的歧义是否来自标准. (2认同)

Fat*_*ğlu 189

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
Run Code Online (Sandbox Code Playgroud)

来源: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)
Run Code Online (Sandbox Code Playgroud)

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

Raz*_*aul 99

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

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

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

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

  • 从版本50+开始,Chrome现在最多支持17个Max Connections,使其与Firefox和Safari相提并论. (10认同)
  • 每个镀铬标签是否有此限制?或单个Chrome实例中的所有标签?或所有Chrome实例中的所有标签? (10认同)
  • 任何人都可以使用 browserscope 来测试这一点,看起来工具不再托管。 (4认同)
  • @Don Dilanga,“子域”只是在某些情况下用于描述域的一个词。“子域”的具体含义仅与一些旧的 Web 技术(例如 cookie)相关。更合适的术语是“主机”,因为地址也很重要。但就本问答而言,域 = 子域 = 主机。当然,他们都是错的,因为在实践中,这实际上与_origin_有关:方案、主机和端口。(现已失效的)HTTP/1.1 规范本身没有使用这些术语,而是使用了短语“服务器或代理”。 (2认同)

Sor*_*ush 44

各种浏览器对每个主机名的最大连接有各种限制; 您可以在http://www.browserscope.org/?category=network找到确切的数字, 这是一篇有关网络性能专家Steve Souders的连接限制的有趣文章http://www.stevesouders.com/blog/2008/ 3月20日/舍入上平行的连接/

  • 任何人都可以使用 browserscope 来测试这一点,看起来工具不再托管。 (3认同)

pal*_*wim 14

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

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

  • 它实际上是`network.http.max-persistent-connections-per-server` (3认同)

Jet*_*son 8

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

Safari 4: 6  
Chrome 6: 7  
FF 4: 6
Run Code Online (Sandbox Code Playgroud)

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


Jos*_*osh 5

2个并发请求是许多浏览器设计的有意部分.有一个标准,"良好的http客户端"是故意坚持的.查看此RFC以了解原因.

  • 遵循标准是好的,但是应用常识并参与*修改*那些:见http://trac.tools.ietf.org/wg/httpbis/trac/ticket/131 (13认同)

ori*_*que 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连接)


Bli*_*ixt 0

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

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