Maksymalna liczba równoległych połączeń HTTP w przeglądarce?

465

Tworzę niektóre zawieszone połączenia z serwerem HTTP (kometa, odwrotna ajax itp.). Działa dobrze, ale widzę, że przeglądarka zezwala tylko na dwa zawieszone połączenia z daną domeną jednocześnie. Więc jeśli użytkownik patrzy na moją stronę w Tab1 swojej przeglądarki, a następnie próbuje ją załadować w Tab2, wykorzystał dwa dozwolone połączenia z moją witryną.

Myślę, że mogę zrobić coś z domeną wieloznaczną, gdzie mój serwer HTTP rozpoznaje dowolny adres mojej witryny, na przykład:

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

więc:

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

wszystkie nadal wskazują na ( www.example.com/webapp), ale przeglądarka traktuje je jako różne domeny, więc nie mam limitu 2 połączeń. Czy to prawda?

Nawet jeśli to prawda - czy istnieje ograniczenie liczby aktywnych połączeń na przeglądarkę we wszystkich domenach? Powiedzmy, że używam powyższego schematu - czy na przykład Firefox zezwala tylko na 24 połączenia równoległe w danym momencie? Coś jak:

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!

Właśnie jako przykład wybrałem 24 połączenia / Firefox.

Patrick Mevzek
źródło
3
tak, nazywa się to shardingiem domen, co jest przestarzałą strategią w czasach HTTP / 2
Jeff Puckett,
Rozwiązaniem tutaj jest posiadanie tylko jednego zawieszonego połączenia dla wszystkich aktualizacji kart. Gdy karta jest otwarta, żądanie aktualizacji tej karty jest wysyłane do serwera, a karta nasłuchuje na głównym zawieszonym połączeniu w poszukiwaniu wszelkich aktualizacji i wybiera tylko te, które są zainteresowane. Wiem, że to nie to pytam, ale pomyślałem, że to może być przydatne dla kogoś. :-)
Craigo,

Odpowiedzi:

418

Maksymalna liczba domyślnych równoczesnych trwałych połączeń na serwer / 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

Limit wynosi na serwer / serwer proxy, więc schemat wieloznaczny będzie działał.

FYI: jest to szczególnie związane z HTTP 1.1; inne protokoły mają osobne obawy i ograniczenia (tj. SPDY, TLS, HTTP 2).

Alsciende
źródło
41
Jestem zaskoczony. Czy RFC HTTP 1.1 nie mówi o ograniczeniu trwałych połączeń do 2 na serwer?
Adrian McCarthy
53
Tak. Najnowsze przeglądarki już nie są zgodne.
Alsciende
38
Cytaty dla tych limitów?
AJ.
19
Czy są jakieś ograniczenia dotyczące połączeń WebSockets według pochodzenia?
Mitar
13
Limit 2 połączeń na serwer został usunięty z HTTP 1.1 RFC: 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

źródło: 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
źródło
1
Czy przeglądarka naprawdę może używać tych wysokich wartości, jeśli jest ograniczona do niższej wartości na poziomie systemu operacyjnego? Czy przeglądarka może zastąpić ustawienia systemu operacyjnego? Podobnie jak w systemie Windows masz kilka ustawień rejestru (MaxConnectionsPerServer i MaxConnectionsPer1_0Server), które kontrolują maksymalną liczbę połączeń na serwer, jak wspomniano w tym poście: stackoverflow.com/questions/2960056/…
RBT
Okazało się, że jest to specyficzny problem dotyczący programowania .NET. W każdym razie przeglądarki innych firm wdrażają własne wsparcie HTTP, więc ograniczenia Windows nie będą miały na nie wpływu.
thomasrutter
Ponieważ przeglądarka internetowa często otwiera kilka połączeń TCP (~ 6 równoległych) na host, aby szybciej ładować różne zasoby za pomocą protokołu HTTP 1.1, w przypadku HTTP / 2 nie ma to już miejsca, ponieważ multipleksowanie zyskuje tę samą prędkość w porównaniu z jednym protokołem TCP połączenie?
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

Pierwsza wartość to ConnectionsPerHostname, a druga to MaxConnections .

Źródło: http://www.browserscope.org/?category=network&v=top

Uwaga: ConnectionsPerHostname to maksymalna liczba równoczesnych żądań HTTP, które przeglądarki wysyłają do tej samej domeny. Aby zwiększyć liczbę jednoczesnych połączeń, można hostować zasoby (np. Obrazy) w różnych domenach. Nie można jednak przekroczyć MaxConnections , maksymalnej liczby połączeń, które przeglądarka otworzy łącznie - we wszystkich domenach.

Aktualizacja 2020

Liczba połączeń równoległych na przeglądarkę

| 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]: przetestowano z 72 żądaniami, 1 domeną (127.0.0.1)
  • [^ note2]: testowane z 1002 żądaniami, 6 żądań na domenę * 167 domen (127.0.0. *)
  • [^ note3]: gdy jest wywoływany w kontekście asynchronicznym, np. w wywołaniu zwrotnym setTimeout, + requestAnimationFrame, then...
  • [^ note4]: z czego 6 ostatnich stanowi kontynuację (2,4,6 dostępne odpowiednio w 0,5s, 1s, 1,5s)
Razan Paul
źródło
11
Począwszy od wersji 50+ Chrome obsługuje teraz maksymalnie 17 połączeń Max, co dorównuje Firefoxowi i Safari.
Zhaph - Ben Duguid
Myślę, że ta odpowiedź jest nieco myląca. Host i domena są zupełnie inne. ConnecterPerHostname oznacza na subdomenę. Więc jeśli są 2 subdomeny, używa dodatkowych połączeń. Jeśli nie ma subdomeny, oznacza to dla każdej domeny.
Don Dilanga,
14
Czy ten limit dotyczy karty Chrome? Lub Wszystkie karty w jednym wystąpieniu Chrome? Lub wszystkie karty we wszystkich instancjach Chrome?
AshD
14

Firefox przechowuje ten numer w tym ustawieniu (znajdziesz go w about:config ):network.http.max-connections-per-server

W przypadku maksymalnych połączeń Firefox przechowuje to w tym ustawieniu: network.http.max-connections

palswim
źródło
network.http.max-connectionsma domyślnie 900, co nie odnosi się do maksymalnej liczby połączeń równoległych, która poprzez testowanie wersji 52 wynosi wciąż 17.
2867288
3
to network.http.max-persistent-connections-per-serverwłaściwie
Lech Osiński,
9

Podczas testowania na stronie zauważyłem takie zachowanie:

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

Edycja: Wydaje się, że firefox 4 powinien być w stanie wykonać 15 połączeń, ale takiego zachowania nie zaobserwowałem.

Jethro Larson
źródło
Która wersja Chrome? 6 czy 5?
Husky,
Myślę, że to było 6, ale jestem na kanale deweloperskim i to było trochę wcześniej. Ciche aktualizacje oznaczają, że muszę cały czas sprawdzać.
Jethro Larson
5

Dwa równoległe żądania są celową częścią projektu wielu przeglądarek. Istnieje standard, który celowo przestrzegają „dobrzy klienci HTTP”. Sprawdź to RFC, aby zobaczyć dlaczego.

Josh
źródło
Zgadzam się, prawdopodobnie najlepiej byłoby przestrzegać tego standardu.
palswim
13
Przestrzeganie standardów jest dobre, ale także stosowanie zdrowego rozsądku i uczestniczenie w ich rewizji : patrz trac.tools.ietf.org/wg/httpbis/trac/ticket/131
Julian Reschke
1
Dobra uwaga @JulianReschke, ale w przypadku HTTP / 2 nie jest już wymagana duża liczba połączeń na host. Patrz: http2.github.io/faq/#why-just-one-tcp-connection
David
5

Patrzeć na about:config na Firefox 33 na GNU / Linux (Ubuntu) i szukając connectionsznalazłem:

network.http.max-connection: 256

To może odpowiedzieć na pytanie, czy istnieje ograniczenie liczby aktywnych połączeń na przeglądarkę we wszystkich domenach

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

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

pominął dwie właściwości ...

network.websocket.max-connections: 200

(ciekawe, wydaje się, że nie są ograniczone na serwer, ale mają domyślną wartość niższą niż globalne połączenia HTTP)

orique
źródło
2

Należy pamiętać, że zwiększenie maksymalnej liczby połączeń przeglądarki na serwer do nadmiernej liczby (jak sugerują niektóre strony) może i blokuje innym użytkownikom dostęp do małych witryn dzięki planom hostingowym, które ograniczają całkowitą liczbę jednoczesnych połączeń na serwerze.

John A.
źródło
2

Rozumiem, że limitu połączeń nie można zmienić po stronie klienta. Limit połączenia musi zostać zmieniony na serwerze, aby uzyskać jakikolwiek efekt. Domyślnie wiele serwerów zezwala tylko na 2 połączenia na jednego klienta.

Klient nie jest przeglądarką, to komputer kliencki wysyłający żądania TCP / IP.

Aby zobaczyć efekt bardzo wyraźnie, użyj czegoś takiego jak JMeter, aby wystrzelić kilka wywołań usług internetowych do hosta serwera - zaakceptuje dwa pierwsze i nie zaakceptuje kolejnego, dopóki jedno z nich nie zostanie zakończone. Niesamowite jest to, że w przypadku sklepu SOA jest to bardzo ważne, ale mało kto jest tego świadomy.

Rodney P. Barbati
źródło
1

Nie ma na to ostatecznej odpowiedzi, ponieważ każda przeglądarka ma własną konfigurację do tego, a konfigurację tę można zmienić. Jeśli wyszukujesz w Internecie, możesz znaleźć sposoby na zmianę tego limitu (zwykle są one oznaczone jako „metody poprawy wydajności”). Może być wskazane, aby użytkownicy zrobili to, jeśli jest to wymagane przez Twoją witrynę.

Blixt
źródło
Powtarzam, to nie jest konfigurowalne w przeglądarce - lub może być, ale nadal nie będzie miało żadnego efektu. To serwer wymusza 2 połączenia na klienta, a nie klient ani przeglądarka na kliencie. Zwiększenie liczby połączeń w przeglądarce pozwoli ci mieć 2 połączenia z bardziej odrębnymi serwerami (tzn. Możesz pobierać z kilku serwerów jednocześnie, bez problemu). Nie można jednak pobierać więcej niż 2 plików z jednego serwera w tym samym czasie. W tym celu należy zmodyfikować serwer.
Rodney P. Barbati
2
Przyznaję, że ta odpowiedź jest nieaktualna, ale jest dokładna w chwili jej napisania. Po pierwsze, serwery rzadko znacznie ograniczają połączenia na IP, więc myślę, że się mylisz. Po drugie, w 2009 r. IE 7 wciąż istniał i miał maksymalnie dwa połączenia na nazwę hosta. Można to było skonfigurować za pomocą rejestru systemu. Nawet dzisiaj przeglądarki mają ograniczenia i często można je konfigurować, ale limity te są znacznie wyższe niż wtedy. W każdym razie wraz z pojawieniem się SPDY / HTTP2 stał się to znacznie mniejszy problem, ponieważ serwery i przeglądarki implementują nowy protokół.
Blixt,
1
  1. Tak, domena wieloznaczna będzie działać dla Ciebie.
  2. Nie zdaje sobie sprawy z żadnych ograniczeń połączeń. Ograniczenia, jeśli takie będą, będą specyficzne dla przeglądarki.
Ryan Oberoi
źródło