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.

Patrick Mevzek
fonte
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).

Alsciende
fonte
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)
Fatih Hayrioğlu
fonte
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)
Razan Paul
fonte
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

palswim
fonte
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.

Jethro Larson
fonte
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ê.

Josh
fonte
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)

orique
fonte
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.

John A.
fonte
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.

Rodney P. Barbati
fonte
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.

Blixt
fonte
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.
Ryan Oberoi
fonte