Max conexões http paralelas em um navegador?


465

Estou criando algumas conexões suspensas para um servidor HTTP (cometa, ajax reverso, etc). Funciona bem, mas vejo que o navegador só permite duas conexões suspensas para um determinado domínio simultaneamente. Portanto, se um usuário estiver visualizando meu site na Tab1 do navegador, e também tentar carregá-lo na Tab2, ele utilizará as duas conexões permitidas ao meu site.

Eu acho que posso fazer alguma coisa de domínio curinga, onde meu servidor http resolve qualquer endereço do meu site, como:

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

tão:

a.example.com/webapp
b.example.com/webapp
c.example.com/webapp

todos ainda apontam para ( www.example.com/webapp), mas o navegador os considera domínios diferentes; portanto, não encontro o limite de 2 conexões. Isso é verdade?

Mesmo se isso for verdade - existe algum limite para o número de conexões ativas por navegador em todos os domínios? Digamos que eu use o esquema acima - o Firefox, por exemplo, permite apenas 24 conexões paralelas a qualquer momento? Algo como:

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!

Acabei de escolher 24 conexões / Firefox como exemplo.



3
sim ele é chamado de fragmentação de domínio que é uma estratégia obsoleta na era da HTTP / 2
— Jeff Puckett

A solução aqui é ter apenas uma conexão suspensa para todas as atualizações de guias. Quando uma guia é aberta, uma solicitação de atualizações para essa guia é enviada ao servidor, e a guia escuta na conexão suspensa principal em busca de atualizações e escolhe apenas as que estão interessadas. Sei que não é isso que você está perguntando, mas achou que poderia ser útil para alguém. :-)
— Craigo 18/02/19

Respostas:


418

Número máximo de conexões persistentes simultâneas padrão por servidor / proxy:

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

O limite é por servidor / proxy, portanto, seu esquema de caracteres curinga funcionará.

FYI: isso está especificamente relacionado ao HTTP 1.1; outros protocolos têm preocupações e limitações separadas (por exemplo, SPDY, TLS, HTTP 2).


41
Estou surpreso. O RFC HTTP 1.1 não diz limitar as conexões persistentes a 2 por servidor?
— Adrian McCarthy

53
Sim. Navegadores recentes não estão mais em conformidade.
— Alsciende

38
Citação (ões) para esses limites?
— AJ.

19
Existem limites nas conexões WebSockets por origem?
— Mitar

13
O limite de 2 conexões por servidor foi removido da RFC HTTP 1.1: 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

fonte: 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
O navegador pode realmente usar esses valores altos se estiver restrito a um valor mais baixo no nível do sistema operacional? O navegador pode substituir as configurações do sistema operacional? Como no Windows, você tem poucas configurações de registro (MaxConnectionsPerServer e MaxConnectionsPer1_0Server) que controlam o máximo de conexões por servidor, conforme mencionado neste post: stackoverflow.com/questions/2960056/…
— RBT:

Acabou sendo um problema específico de programação .NET. De qualquer forma, navegadores de terceiros implementam seu próprio suporte HTTP, portanto não serão afetados pelos limites do Windows.
— thomasrutter

Portanto, como é comum o Navegador da Web abrir várias conexões TCP (~ 6 paralelas) por host para carregar os diferentes recursos mais rapidamente com o HTTP 1.1, esse não é mais o caso do HTTP / 2, pois a multiplexação ganha a mesma velocidade em um TCP conexão?
— Stefan

118
 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

O primeiro valor é ConnectionsPerHostname e o segundo valor é MaxConnections .

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

Nota: ConnectionsPerHostname é o número máximo de solicitações http simultâneas que os navegadores farão no mesmo domínio. Para aumentar o número de conexões simultâneas, é possível hospedar recursos (por exemplo, imagens) em diferentes domínios. No entanto, você não pode exceder o MaxConnections , o número máximo de conexões que um navegador abrirá no total - em todos os domínios.

Atualização 2020

Número de conexões paralelas por navegador

| 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]: testado com 72 solicitações, 1 domínio (127.0.0.1)
  • [^ note2]: testado com 1002 solicitações, 6 solicitações por domínio * 167 domínios (127.0.0. *)
  • [^ note3]: quando chamado em contexto assíncrono, por exemplo, em retorno de chamada de setTimeout, + requestAnimationFrame, then...
  • [^ note4]: dos quais os últimos 6 são acompanhamentos (2,4,6 disponíveis em 0,5s, 1s, 1,5s, respectivamente)

11
A partir da versão 50+, o Chrome agora suporta no máximo 17 Max Connections, equiparando-o ao Firefox e Safari.
— Zhaph - Ben Duguid 13/03

Eu acho que essa resposta é um pouco enganadora. Host e domínio são completamente diferentes. ConnectionsPerHostname significa por subdomínio. Portanto, se houver dois subdomínios, ele usará conexões adicionais. Se não houver subdomínio, significa por domínio.
— Don Dilanga

14
Esse limite é por guia do Chrome? Ou Todas as guias em uma única instância do Chrome? Ou todas as guias em todas as instâncias do Chrome?
— AshD 14/05


14

O Firefox armazena esse número nessa configuração (você o encontra about:config):network.http.max-connections-per-server

Para as conexões máximas, o Firefox armazena isso nesta configuração: network.http.max-connections


network.http.max-connectionsé 900 por padrão, o que não está relacionado ao número máximo de conexões paralelas que, através do teste da versão 52, ainda é 17.
— #

3
é network.http.max-persistent-connections-per-serverrealmente
— Lech Osiński

9

Fazendo testes em uma página, vi esse comportamento:

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

Edit: Parece que o firefox 4 deve ser capaz de fazer 15 conexões, mas esse não é o comportamento que observei.


Qual versão do Chrome? 6 ou 5?
— Husky,

Eu acho que tinha 6 anos, mas estou no canal de desenvolvimento e foi há pouco tempo. As atualizações silenciosas significam que tenho que verificar o tempo todo.
— Jethro Larson

5

As 2 solicitações simultâneas são uma parte intencional do design de muitos navegadores. Existe um padrão lá fora, que "bons clientes http" aderem de propósito. Confira este RFC para ver o porquê.


Eu concordo, provavelmente seria melhor seguir o padrão.
— palswim

13
Seguintes normas é bom, mas assim que está aplicando o senso comum e participando de revisão aqueles: ver trac.tools.ietf.org/wg/httpbis/trac/ticket/131
— Julian Reschke

1
Bom ponto @JulianReschke, mas com HTTP / 2 não é mais necessário ter um número alto de conexões por host. Veja: http2.github.io/faq/#why-just-one-tcp-connection
— David

5

Olhando para o about:configFirefox 33 no GNU / Linux (Ubuntu) e pesquisando connections, encontrei:

network.http.max-connections: 256

É provável que responda à parte : existe algum limite para o número de conexões ativas por navegador, em todo o domínio

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

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

pulou duas propriedades ...

network.websocket.max-connections: 200

(interessante, parece que eles não são limitados por servidor, mas têm um valor padrão menor que as conexões http globais)


2

Observe que aumentar o número máximo de conexões de um navegador por servidor para um número excessivo (como sugerem alguns sites) pode bloquear outros usuários de sites pequenos com planos de hospedagem que limitam o total de conexões simultâneas no servidor.


2

Meu entendimento é que o limite de conexão não é alterável no lado do cliente. O limite de conexão deve ser alterado no servidor para ter algum efeito. Por padrão, muitos servidores permitem apenas 2 conexões por cliente único.

O cliente não é o navegador, é a máquina do cliente que está emitindo as solicitações de TCP / IP.

Para ver o efeito com muita clareza, use algo como o JMeter para disparar várias chamadas de serviço da web para o host do servidor - ele aceitará os dois primeiros e não aceitará outro até que um deles seja concluído. O incrível é que, para uma loja de SOA, isso é crítico, mas dificilmente alguém está realmente ciente disso.


1

Não há resposta definitiva para isso, pois cada navegador tem sua própria configuração para isso, e essa configuração pode ser alterada. Se você pesquisar na Internet, poderá encontrar maneiras de alterar esse limite (geralmente elas são marcadas como "métodos de aprimoramento de desempenho"). Pode valer a pena aconselhar seus usuários a fazê-lo, se for exigido pelo seu site.


Repito, isso não é configurável no navegador - ou pode ser, mas ainda não terá efeito. É o servidor que está aplicando as 2 conexões por cliente, não o cliente nem o navegador no cliente. Aumentar as conexões no navegador permitirá que você tenha 2 conexões com servidores mais distintos (ou seja, você pode fazer o download de vários servidores ao mesmo tempo, sem problemas). No entanto, não era possível baixar mais de 2 arquivos de um único servidor ao mesmo tempo. Para fazer isso, o servidor deve ser modificado.
— Rodney P. Barbati

2
Esta resposta está desatualizada, mas é precisa no momento em que foi escrita. Primeiro, os servidores raramente limitam significativamente as conexões por IP, então acho que você está errado lá. Segundo, em 2009, o IE 7 ainda existia e tinha no máximo duas conexões por nome de host. Isso foi configurável através do registro do sistema. Ainda hoje, os navegadores têm limites e geralmente são configuráveis, mas esses limites são muito mais altos do que antes. De qualquer forma, com o advento do SPDY / HTTP2, isso se tornou um problema significativamente menor à medida que servidores e navegadores implementam o novo protocolo.
— Blixt

1
  1. Sim, o domínio curinga funcionará para você.
  2. Não tem conhecimento de quaisquer limites nas conexões. Limita se algum for específico do navegador.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.