我正在创建一些到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 回答
最大每个服务器/代理的默认同时持久连接数:
限制是每服务器/代理,因此您的通配符方案将起作用 .
仅供参考:这与HTTP 1.1特别相关;其他协议有单独的顾虑和限制(即SPDY,TLS,HTTP 2) .
HTTP / 1.1
来源:http://p2p.wrox.com/book-professional-website-performance-optimizing-front-end-back-end-705/
HTTP / 2(SPDY)
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 ,即浏览器将在所有域中打开的最大连接数 .
各种浏览器对每个主机名的最大连接有各种限制;您可以在http://www.browserscope.org/?category=network找到确切的数字,这是一篇关于网络性能专家Steve Souders的连接限制的有趣文章http://www.stevesouders.com/blog/2008/03/20/roundup-on-parallel-connections/
Firefox在此设置中存储该数字(您在
about:config
中找到它):network.http.max-connections-per-server
对于最大连接,Firefox会在此设置中存储:
network.http.max-connections
在页面上进行测试我看到了这种行为:
编辑:似乎firefox 4应该可以做15个连接,但这不是我观察到的行为 .
2个并发请求是许多浏览器设计的有意部分 . 有一个标准是"good http clients"故意坚持 . 查看this RFC以了解原因 .
在GNU / Linux(Ubuntu)上的Firefox 33上查看
about:config
,并搜索connections
我发现:这很可能回答这部分是否存在对所有域中每个浏览器的活动连接数的限制
跳过两个属性......
(有趣的是,它们似乎不受每台服务器的限制,但默认值低于全局http连接)
是的,通配符域将适合您 .
不知道连接有任何限制 . 限制(如果有)将特定于浏览器 .
请注意,将每个服务器的浏览器最大连接数增加到过多数量(如某些网站建议的那样)可以并确实将其他用户锁定在小型站点之外,其中托管计划限制了服务器上的同时连接总数 .
我的理解是连接限制在客户端不可更改 . 必须在服务器上更改连接限制才能生效 . 默认情况下,许多服务器每个唯一客户端只允许2个连接 .
客户端不是浏览器,它是发出TCP / IP请求的客户端机器 .
要非常清楚地看到效果,请使用JMeter之类的东西来激活对服务器主机的一堆Web服务调用 - 它将接受前两个,并且在完成两个中的一个之前不会接受另一个 . 令人惊奇的是,对于SOA商店来说,这很关键,但几乎没有人真正意识到这一点 .
对此没有明确的答案,因为每个浏览器都有自己的配置,并且可能会更改此配置 . 如果您在互联网上搜索,您可以找到更改此限制的方法(通常它们被称为“性能增强方法” . )如果您的网站需要,可能值得建议您的用户这样做 .