Max parallele http-Verbindungen in einem Browser?

465

Ich erstelle einige unterbrochene Verbindungen zu einem HTTP-Server (Komet, Reverse Ajax usw.). Es funktioniert in Ordnung, aber ich sehe, dass der Browser nur zwei unterbrochene Verbindungen zu einer bestimmten Domain gleichzeitig zulässt. Wenn ein Benutzer meine Website in Tab1 seines Browsers betrachtet und dann versucht, sie in Tab2 zu laden, hat er die beiden zulässigen Verbindungen zu meiner Website aufgebraucht.

Ich denke, ich kann eine Wildcard-Domain-Sache machen, bei der mein http-Server eine beliebige Adresse für meine Site auflöst:

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

damit:

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

Alle zeigen immer noch auf ( www.example.com/webapp), aber der Browser betrachtet sie als unterschiedliche Domänen, sodass ich nicht auf das Verbindungslimit von 2 stoße. Ist das wahr?

Auch wenn das ist wahr - Gibt es eine Begrenzung für die Anzahl der aktiven Verbindungen pro Browser, über alle Domains? Angenommen, ich verwende das oben beschriebene Schema. Erlaubt Firefox beispielsweise nur 24 parallele Verbindungen zu einem bestimmten Zeitpunkt? Etwas wie:

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!

Ich habe gerade 24 Verbindungen / Firefox als Beispiel ausgewählt.

Patrick Mevzek
quelle
3
Ja, es heißt Domain Sharding, was im Zeitalter von HTTP / 2 eine veraltete Strategie ist
Jeff Puckett
Die Lösung besteht darin, nur eine unterbrochene Verbindung für alle Ihre Registerkartenaktualisierungen zu haben. Wenn eine Registerkarte geöffnet wird, wird eine Anforderung für Aktualisierungen für diese Registerkarte an den Server gesendet, und die Registerkarte überwacht die unterbrochene Hauptverbindung auf Aktualisierungen und nimmt nur diejenigen auf, an denen sie interessiert ist. Ich weiß, dass Sie dies nicht tun Ich frage, dachte aber, es könnte für jemanden nützlich sein. :-)
Craigo

Antworten:

418

Maximale Anzahl gleichzeitiger persistenter Standardverbindungen pro 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

Das Limit ist pro Server / Proxy, sodass Ihr Platzhalterschema funktioniert.

Zu Ihrer Information: Dies bezieht sich speziell auf HTTP 1.1; Andere Protokolle haben separate Bedenken und Einschränkungen (z. B. SPDY, TLS, HTTP 2).

Alsciende
quelle
41
Ich bin überrascht. Sagt der HTTP 1.1-RFC nicht, dass dauerhafte Verbindungen auf 2 pro Server beschränkt werden sollen?
Adrian McCarthy
53
Ja tut es. Neuere Browser passen sich nicht mehr an.
Alsciende
38
Zitat (e) für diese Grenzen?
AJ.
19
Gibt es Beschränkungen für WebSockets-Verbindungen pro Ursprung?
Mitar
13
Das Limit von 2 Verbindungen pro Server wurde aus dem HTTP 1.1-RFC entfernt: 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

Quelle: 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
quelle
1
Kann der Browser diese hohen Werte wirklich verwenden, wenn sie auf Betriebssystemebene auf einen niedrigeren Wert beschränkt sind? Kann der Browser die Betriebssystemeinstellungen überschreiben? Wie in Windows haben Sie nur wenige Registrierungseinstellungen (MaxConnectionsPerServer und MaxConnectionsPer1_0Server), die die maximalen Verbindungen pro Server steuern, wie in diesem Beitrag erwähnt: stackoverflow.com/questions/2960056/…
RBT
Es stellte sich heraus, dass dies ein spezifisches Problem bei der .NET-Programmierung war. In jedem Fall implementieren Browser von Drittanbietern ihre eigene HTTP-Unterstützung, sodass sie nicht von den Windows-Beschränkungen betroffen sind.
Thomasrutter
Da es für den Webbrowser üblich ist, mehrere TCP-Verbindungen (~ 6 parallele Verbindungen) pro Host zu öffnen, um die verschiedenen Ressourcen mit HTTP 1.1 schneller zu laden, ist dies bei HTTP / 2 nicht mehr der Fall, da das Multiplexen über ein TCP dieselbe Geschwindigkeit erreicht Verbindung?
Stefan
117
 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

Der erste Wert ist ConnectionsPerHostname und der zweite Wert ist MaxConnections .

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

Hinweis: ConnectionsPerHostname ist die maximale Anzahl gleichzeitiger http-Anforderungen, die Browser an dieselbe Domäne senden. Um die Anzahl der gleichzeitigen Verbindungen zu erhöhen, können Ressourcen (z. B. Bilder) in verschiedenen Domänen gehostet werden. Sie dürfen jedoch MaxConnections nicht überschreiten , die maximale Anzahl von Verbindungen, die ein Browser insgesamt öffnet - über alle Domänen hinweg.

2020 Update

Anzahl der parallelen Verbindungen pro 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]: getestet mit 72 Anfragen, 1 Domain (127.0.0.1)
  • [^ note2]: getestet mit 1002 Anfragen, 6 Anfragen pro Domain * 167 Domains (127.0.0. *)
  • [^ note3]: beim Aufruf im asynchronen Kontext, zB beim Rückruf von setTimeout, + requestAnimationFrame, then...
  • [^ note4]: von denen die letzten 6 Follow-ups sind (2,4,6 verfügbar bei 0,5 s, 1 s bzw. 1,5 s)
Razan Paul
quelle
11
Ab Version 50+ unterstützt Chrome jetzt maximal 17 Max Connections und entspricht damit Firefox und Safari.
Zhaph - Ben Duguid
Ich denke, diese Antwort ist etwas irreführend. Host und Domain sind völlig unterschiedlich. ConnectionsPerHostname bedeutet pro Subdomain. Wenn es also 2 Subdomains gibt, werden zusätzliche Verbindungen verwendet. Wenn keine Subdomain vorhanden ist, bedeutet dies pro Domain.
Don Dilanga
14
Ist diese Grenze pro Chromlasche? Oder Alle Registerkarten in einer einzelnen Instanz von Chrome? Oder alle Registerkarten in allen Instanzen von Chrome?
AshD
14

Firefox speichert diese Nummer in dieser Einstellung (Sie finden sie in about:config):network.http.max-connections-per-server

Für die maximalen Verbindungen speichert Firefox Folgendes: network.http.max-connections

palswim
quelle
network.http.max-connectionsist standardmäßig 900, was sich nicht auf die maximale Anzahl paralleler Verbindungen bezieht, die durch Testen der Version 52 immer noch 17 beträgt.
user2867288
3
es ist network.http.max-persistent-connections-per-servertatsächlich
Lech Osiński
9

Beim Testen auf einer Seite habe ich folgendes Verhalten festgestellt:

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

Bearbeiten: Scheint, dass Firefox 4 in der Lage sein sollte, 15 Verbindungen herzustellen, aber das ist nicht das Verhalten, das ich beobachtet habe.

Jethro Larson
quelle
Welche Version von Chrome? 6 oder 5?
Husky
Ich denke, es war 6, aber ich bin auf dem Entwicklerkanal und es ist eine Weile her. Die stillen Updates bedeuten, dass ich die ganze Zeit nachsehen muss.
Jethro Larson
5

Die 2 gleichzeitigen Anforderungen sind ein absichtlicher Bestandteil des Designs vieler Browser. Es gibt einen Standard, an den sich "gute http-Clients" absichtlich halten. Schauen Sie sich diesen RFC an an, um zu sehen, warum.

Josh
quelle
Ich stimme zu, es wäre wahrscheinlich am besten, dem Standard zu folgen.
Palswim
13
Das Befolgen von Standards ist gut, aber auch das Anwenden von gesundem Menschenverstand und die Teilnahme an deren Überarbeitung : siehe trac.tools.ietf.org/wg/httpbis/trac/ticket/131
Julian Reschke
1
Guter Punkt @JulianReschke, aber mit HTTP / 2 ist es nicht mehr erforderlich, eine hohe Anzahl von Verbindungen pro Host zu haben. Siehe: http2.github.io/faq/#why-just-one-tcp-connection
David
5

Beim Betrachten about:configvon Firefox 33 unter GNU / Linux (Ubuntu) und beim Suchen connectionsfand ich:

network.http.max-Verbindungen: 256

Dies ist wahrscheinlich die Antwort auf die Frage, ob die Anzahl der aktiven Verbindungen pro Browser in allen Domänen begrenzt ist

network.http.max-persistente-Verbindungen-pro-Proxy: 32

network.http.max-persistente-Verbindungen-pro-Server: 6

zwei Eigenschaften übersprungen ...

network.websocket.max-Verbindungen: 200

(Interessant, anscheinend sind sie nicht pro Server beschränkt, sondern haben einen niedrigeren Standardwert als globale http-Verbindungen.)

orique
quelle
2

Beachten Sie, dass das Erhöhen der maximalen Verbindungen eines Browsers pro Server auf eine übermäßige Anzahl (wie einige Websites vorschlagen) andere Benutzer von kleinen Websites mit Hosting-Plänen ausschließen kann und tut, die die Gesamtzahl der gleichzeitigen Verbindungen auf dem Server begrenzen.

John A.
quelle
2

Nach meinem Verständnis kann das Verbindungslimit auf der Clientseite nicht geändert werden. Das Verbindungslimit muss auf dem Server geändert werden, um Auswirkungen zu haben. Standardmäßig erlauben viele Server nur 2 Verbindungen pro eindeutigem Client.

Der Client ist nicht der Browser, sondern der Clientcomputer, der die TCP / IP-Anforderungen ausgibt.

Um den Effekt sehr deutlich zu sehen, verwenden Sie etwas wie JMeter, um eine Reihe von Webdienstaufrufen an Ihren Serverhost auszulösen. Die ersten beiden werden akzeptiert, und eine weitere wird erst akzeptiert, wenn eine der beiden abgeschlossen ist. Das Erstaunliche daran ist, dass dies für einen SOA-Shop von entscheidender Bedeutung ist, aber kaum jemand ist sich dessen wirklich bewusst.

Rodney P. Barbati
quelle
1

Es gibt keine endgültige Antwort darauf, da jeder Browser seine eigene Konfiguration dafür hat und diese Konfiguration möglicherweise geändert wird. Wenn Sie im Internet suchen, können Sie nach Möglichkeiten suchen, dieses Limit zu ändern (normalerweise werden sie als "Methoden zur Leistungssteigerung" bezeichnet). Es kann sinnvoll sein, Ihren Benutzern dies zu empfehlen, wenn dies für Ihre Website erforderlich ist.

Blixt
quelle
Ich wiederhole, dies ist im Browser nicht konfigurierbar - oder es kann sein, hat aber immer noch keine Auswirkungen. Es ist der Server, der die 2 Verbindungen pro Client erzwingt, nicht der Client oder der Browser auf dem Client. Durch Erhöhen der Verbindungen im Browser können Sie zwei Verbindungen zu unterschiedlichen Servern herstellen (dh Sie können problemlos von mehreren Servern gleichzeitig herunterladen). Sie können jedoch nicht mehr als 2 Dateien gleichzeitig von einem einzelnen Server herunterladen. Dazu muss der Server geändert werden.
Rodney P. Barbati
2
Zugegeben, diese Antwort ist veraltet, aber zum Zeitpunkt der Erstellung korrekt. Erstens beschränken Server Verbindungen pro IP selten erheblich, daher denke ich, dass Sie dort falsch liegen. Zweitens gab es IE 7 im Jahr 2009 noch und es gab maximal zwei Verbindungen pro Hostname. Dies war über die Systemregistrierung konfigurierbar. Noch heute haben Browser Grenzen und sind oft konfigurierbar, aber diese Grenzen sind viel höher als damals. Mit dem Aufkommen von SPDY / HTTP2 ist dies jedoch zu einem erheblich kleineren Problem geworden, da Server und Browser das neue Protokoll implementieren.
Blixt
1
  1. Ja, die Wildcard-Domain funktioniert für Sie.
  2. Keine Einschränkungen für Verbindungen bekannt. Eventuelle Einschränkungen sind browserspezifisch.
Ryan Oberoi
quelle