Numero massimo di connessioni http parallele in un browser?


465

Sto creando alcune connessioni sospese a un server HTTP (cometa, reverse ajax, ecc.). Funziona bene, ma vedo che il browser consente solo due connessioni sospese a un determinato dominio contemporaneamente. Quindi, se un utente sta guardando il mio sito Web in Tab1 del proprio browser, quindi prova anche a caricarlo in Tab2, ha utilizzato le due connessioni consentite al mio sito.

Penso di poter fare qualche cosa di dominio jolly, in cui il mio server http risolve qualsiasi indirizzo sul mio sito come:

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

così:

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

tutti puntano ancora a ( www.example.com/webapp) ma il browser li considera domini diversi, quindi non mi imbatto nel limite di 2 connessioni. È vero?

Anche se questo è vero, esiste un limite al numero di connessioni attive per browser, in tutti i domini? Supponiamo che io usi lo schema sopra - Firefox, ad esempio, consente solo 24 connessioni parallele in un dato momento? Qualcosa di simile a:

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!

Ho appena scelto 24 connessioni / Firefox come esempio.



3
sì, si chiama domain sharding che è una strategia obsoleta nell'era di HTTP / 2
Jeff Puckett,

La soluzione qui è quella di avere solo una connessione sospesa per tutti gli aggiornamenti delle schede. Quando viene aperta una scheda, una richiesta di aggiornamenti per quella scheda viene inviata al server e la scheda è in ascolto sulla connessione sospesa principale per eventuali aggiornamenti e raccoglie solo quelli a cui è interessata. So che questo non è ciò che tu stai chiedendo, ma ho pensato che potesse essere utile per qualcuno. :-)
Craigo

Risposte:


418

Numero massimo di connessioni permanenti simultanee predefinite per server / 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

Il limite è per server / proxy, quindi il tuo schema jolly funzionerà.

FYI: questo è specificamente correlato a HTTP 1.1; altri protocolli hanno preoccupazioni e limiti separati (ad es. SPDY, TLS, HTTP 2).


41
Sono sorpreso. HTTP RFC 1.1 non dice di limitare le connessioni persistenti a 2 per server?
Adrian McCarthy,

53
Sì lo fa. I browser recenti non sono più conformi.
Alsciende,

38
Citazioni per questi limiti?
AJ.

19
Esistono limiti per le connessioni WebSocket per origine?
Mitar,

13
Il limite di 2 connessioni per server è stato rimosso dalla 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)

Una tabella simile è disponibile all'indirizzo http://sgdev-blog.blogspot.com/2014/01/ma maximum
concurrent

1
Il browser può davvero utilizzare questi valori elevati se è limitato a un valore inferiore a livello di sistema operativo? Il browser può ignorare le impostazioni del sistema operativo? Come in Windows hai alcune impostazioni del registro (MaxConnectionsPerServer e MaxConnectionsPer1_0Server) che controllano le connessioni massime per server come menzionato in questo post: stackoverflow.com/questions/2960056/…
RBT

Questo si è rivelato essere un problema specifico di programmazione .NET. In ogni caso i browser di terze parti implementano il proprio supporto HTTP in modo da non essere interessati dai limiti di Windows.
thomasrutter,

Quindi, poiché è comune per Web Browser aprire diverse connessioni TCP (~ 6 parallele) per host per caricare più rapidamente le diverse risorse con HTTP 1.1, non è più così per HTTP / 2 poiché il multiplexing guadagna la stessa velocità su un TCP connessione?
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

Il primo valore è ConnectionsPerHostname e il secondo valore è MaxConnections .

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

Nota: ConnectionsPerHostname è il numero massimo di richieste http simultanee che i browser invieranno allo stesso dominio. Per aumentare il numero di connessioni simultanee, è possibile ospitare risorse (ad esempio immagini) in domini diversi. Tuttavia, non puoi superare MaxConnections , il numero massimo di connessioni che un browser aprirà in totale - in tutti i domini.

Aggiornamento 2020

Numero di connessioni parallele per browser

| 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]: testato con 72 richieste, 1 dominio (127.0.0.1)
  • [^ note2]: testato con 1002 richieste, 6 richieste per dominio * 167 domini (127.0.0. *)
  • [^ note3]: quando chiamato in un contesto asincrono, ad es. nel callback di setTimeout, + requestAnimationFrame, then...
  • [^ note4]: di cui gli ultimi 6 sono follow-up (2,4,6 disponibili rispettivamente a 0,5 secondi, 1 secondo, 1,5 secondi)

11
A partire dalla versione 50+ Chrome ora supporta un massimo di 17 Max Connections, portandolo alla pari con Firefox e Safari.
Zhaph - Ben Duguid,

Penso che questa risposta sia un po 'fuorviante. Host e dominio sono completamente diversi. ConnectionsPerHostname significa per sottodominio. Quindi, se ci sono 2 sottodomini, utilizza connessioni aggiuntive. Se non esiste un sottodominio, significa per dominio.
Don Dilanga,

14
Questo limite è per scheda Chrome? O Tutte le schede in una singola istanza di Chrome? O tutte le schede in tutte le istanze di Chrome?
AshD,


14

Firefox memorizza quel numero in questa impostazione (lo trovi in about:config):network.http.max-connections-per-server

Per le connessioni massime, Firefox memorizza ciò in questa impostazione: network.http.max-connections


network.http.max-connectionsè 900 per impostazione predefinita, che non si riferisce al numero massimo di connessioni parallele che attraverso il test della versione 52 è ancora 17.
user2867288

3
in network.http.max-persistent-connections-per-serverrealtà è
Lech Osiński il

9

Durante i test su una pagina ho visto questo comportamento:

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

Modifica: sembra che Firefox 4 dovrebbe essere in grado di fare 15 connessioni ma non è questo il comportamento che ho osservato.


Quale versione di Chrome? 6 o 5?
Husky,

Penso che fossero 6 ma sono sul canale dev ed è stato poco fa. Gli aggiornamenti silenziosi significano che devo controllare tutto il tempo.
Jethro Larson,

5

Le 2 richieste simultanee sono una parte intenzionale del design di molti browser. C'è uno standard là fuori a cui "buoni client http" aderiscono apposta. Dai un'occhiata a questo RFC per capire perché.


Sono d'accordo, probabilmente sarebbe meglio seguire lo standard.
Palswim,

13
Seguire gli standard è buono, ma anche applicare il buon senso e partecipare alla revisione di quelli: vedi trac.tools.ietf.org/wg/httpbis/trac/ticket/131
Julian Reschke

1
Buon punto @JulianReschke, ma con HTTP / 2 non è più necessario disporre di un numero elevato di connessioni per host. Vedi: http2.github.io/faq/#why-just-one-tcp-connection
David

5

Guardando about:configsu Firefox 33 su GNU / Linux (Ubuntu) e cercando connectionsho trovato:

network.http.max-connections: 256

Ciò è probabile che risponda alla parte che esiste un limite al numero di connessioni attive per browser, in tutto il dominio

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

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

saltato due proprietà ...

network.websocket.max-connections: 200

(interessante, sembra che non siano limitati per server ma abbiano un valore predefinito inferiore alle connessioni http globali)


2

Si noti che aumentare le connessioni massime di un browser per server a un numero eccessivo (come suggeriscono alcuni siti) può e blocca altri utenti da piccoli siti con piani di hosting che limitano le connessioni simultanee totali sul server.


2

La mia comprensione è che il limite di connessione non è modificabile sul lato client. Il limite di connessione deve essere modificato sul server per avere alcun effetto. Per impostazione predefinita, molti server consentiranno solo 2 connessioni per client univoco.

Il client non è il browser, è la macchina client che emette le richieste TCP / IP.

Per vedere l'effetto in modo molto chiaro, usa qualcosa come JMeter per innescare un sacco di chiamate ai servizi web sul tuo host del server: accetteranno i primi due e non ne accetteranno un altro fino a quando uno dei due non sarà completato. La cosa sorprendente di questo è che per un negozio SOA, questo è fondamentale, ma quasi nessuno ne è veramente consapevole.


1

Non esiste una risposta definitiva a questo, poiché ogni browser ha una propria configurazione per questo, e questa configurazione può essere cambiata. Se cerchi su Internet puoi trovare modi per modificare questo limite (di solito sono etichettati come "metodi di miglioramento delle prestazioni"). Potrebbe valere la pena di avvisare i tuoi utenti se è richiesto dal tuo sito web.


Ripeto, questo non è configurabile sul browser - o potrebbe essere, ma non avrà comunque alcun effetto. È il server che impone le 2 connessioni per client, non il client né il browser sul client. Aumentare le connessioni sul browser ti permetterà di avere 2 connessioni a server più distinti (ad esempio potresti scaricare da più server contemporaneamente, nessun problema). Non è possibile, tuttavia, scaricare più di 2 file da un singolo server contemporaneamente. Per fare ciò, il server deve essere modificato.
Rodney P. Barbati,

2
Concesso questa risposta è obsoleta, ma è precisa al momento in cui è stata scritta. Innanzitutto, i server raramente limitano significativamente le connessioni per IP, quindi penso che ti sbagli. In secondo luogo, nel 2009, IE 7 era ancora in circolazione e aveva un massimo di due connessioni per nome host. Questo era configurabile tramite il registro di sistema. Ancora oggi, i browser hanno dei limiti e sono spesso configurabili, ma quei limiti sono molto più alti di allora. Ad ogni modo, con l'avvento di SPDY / HTTP2 questo è diventato un problema significativamente più piccolo poiché i server e i browser implementano il nuovo protocollo.
Tra

1
  1. Sì, il dominio jolly funzionerà per te.
  2. Non sono a conoscenza di limiti alle connessioni. Limiti se specifici saranno specifici del browser.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.