Nombre maximum de connexions http parallèles dans un navigateur?

465

Je crée des connexions suspendues à un serveur HTTP (comète, ajax inverse, etc.). Cela fonctionne bien, mais je vois que le navigateur n'autorise que deux connexions suspendues à un domaine donné simultanément. Donc, si un utilisateur consulte mon site Web dans l'onglet 1 de son navigateur, puis essaie également de le charger dans l'onglet 2, il a utilisé les deux connexions autorisées à mon site.

Je pense que je peux faire quelque chose de domaine générique, où j'ai mon serveur http résoudre n'importe quelle adresse sur mon site comme:

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

donc:

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

tous pointent toujours vers ( www.example.com/webapp) mais le navigateur les considère comme des domaines différents, donc je ne rencontre pas la limite de 2 connexions. Est-ce vrai?

Même si cela est vrai - y a-t-il une limite au nombre de connexions actives par navigateur, dans tous les domaines? Supposons que j'utilise le schéma ci-dessus - Firefox, par exemple, n'autorise-t-il que 24 connexions parallèles à un moment donné? Quelque chose comme:

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!

Je viens de choisir 24 connexions / Firefox comme exemple.

Patrick Mevzek
la source
3
oui, cela s'appelle le partage de domaine qui est une stratégie obsolète à l'ère de HTTP / 2
Jeff Puckett
La solution ici est d'avoir une seule connexion suspendue pour toutes vos mises à jour d'onglets. Lorsqu'un onglet est ouvert, une demande de mises à jour pour cet onglet est envoyée au serveur, et l'onglet écoute la connexion suspendue principale pour toutes les mises à jour, et ne prend que celles qui l'intéressent. Je sais que ce n'est pas ce que vous 'ai demandé, mais j'ai pensé que cela pourrait être utile pour quelqu'un. :-)
Craigo

Réponses:

418

Nombre maximum de connexions persistantes simultanées par défaut par serveur / 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

La limite est par serveur / proxy, donc votre schéma générique fonctionnera.

FYI: ceci est spécifiquement lié à HTTP 1.1; d'autres protocoles ont des préoccupations et des limites distinctes (c.-à-d. SPDY, TLS, HTTP 2).

Alsciende
la source
41
Je suis surpris. La RFC HTTP 1.1 ne dit-elle pas de limiter les connexions persistantes à 2 par serveur?
Adrian McCarthy
53
Oui. Les navigateurs récents ne sont plus conformes.
Alsciende
38
Citation (s) pour ces limites?
AJ.
19
Y a-t-il des limites sur les connexions WebSockets par origine?
Mitar
13
La limite de 2 connexions par serveur a été supprimée de la 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

source: 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
la source
1
Le navigateur peut-il vraiment utiliser ces valeurs élevées s'il est limité à une valeur inférieure au niveau du système d'exploitation? Le navigateur peut-il remplacer les paramètres du système d'exploitation? Comme dans Windows, vous avez peu de paramètres de registre (MaxConnectionsPerServer et MaxConnectionsPer1_0Server) qui contrôlent le nombre maximal de connexions par serveur, comme mentionné dans cet article: stackoverflow.com/questions/2960056/…
RBT
Cela s'est avéré être un problème spécifique à la programmation .NET. En tout cas, les navigateurs tiers implémentent leur propre prise en charge HTTP et ne seront donc pas affectés par les limites de Windows.
thomasrutter
Donc, comme il est courant que le navigateur Web ouvre plusieurs connexions TCP (~ 6 parallèles) par hôte pour charger plus rapidement les différentes ressources avec HTTP 1.1, ce n'est plus le cas pour HTTP / 2 car le multiplexage gagne la même vitesse sur un TCP connexion?
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

La première valeur est ConnectionsPerHostname et la deuxième valeur est MaxConnections .

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

Remarque: ConnectionsPerHostname est le nombre maximal de requêtes http simultanées que les navigateurs effectueront sur le même domaine. Pour augmenter le nombre de connexions simultanées, on peut héberger des ressources (par exemple des images) dans différents domaines. Cependant, vous ne pouvez pas dépasser MaxConnections , le nombre maximal de connexions qu'un navigateur ouvrira au total - dans tous les domaines.

Mise à jour 2020

Nombre de connexions parallèles par navigateur

| 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]: testé avec 72 requêtes, 1 domaine (127.0.0.1)
  • [^ note2]: testé avec 1002 requêtes, 6 requêtes par domaine * 167 domaines (127.0.0. *)
  • [^ note3]: lors d'un appel dans un contexte asynchrone, par exemple en rappel de setTimeout, + requestAnimationFrame, then...
  • [^ note4]: dont les 6 derniers sont des suivis (2,4,6 disponibles respectivement à 0,5s, 1s, 1,5s)
Razan Paul
la source
11
À partir de la version 50+, Chrome prend désormais en charge un maximum de 17 connexions max, ce qui le compare à Firefox et Safari.
Zhaph - Ben Duguid
Je pense que cette réponse est un peu trompeuse. L'hôte et le domaine sont complètement différents. ConnectionsPerHostname signifie par sous-domaine. Donc, s'il y a 2 sous-domaines, il utilise des connexions supplémentaires.Si aucun sous-domaine, cela signifie par domaine.
Don Dilanga
14
Cette limite est-elle par onglet chrome? Ou Tous les onglets dans une seule instance de Chrome? Ou tous les onglets de toutes les instances de Chrome?
AshD
14

Firefox stocke ce numéro dans ce paramètre (vous le trouverez dans about:config):network.http.max-connections-per-server

Pour les connexions max, Firefox enregistre que dans ce paramètre: network.http.max-connections

palswim
la source
network.http.max-connectionsest 900 par défaut, ce qui ne correspond pas au nombre maximal de connexions parallèles qui, par le biais des tests de la version 52, est toujours de 17.
user2867288
3
c'est en network.http.max-persistent-connections-per-serverfait
Lech Osiński
9

En faisant des tests sur une page, j'ai vu ce comportement:

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

Edit: Semble que Firefox 4 devrait être capable de faire 15 connexions mais ce n'est pas le comportement que j'ai observé.

Jethro Larson
la source
Quelle version de Chrome? 6 ou 5?
Husky
Je pense que c'était 6 mais je suis sur la chaîne de développement et c'était il y a peu de temps. Les mises à jour silencieuses signifient que je dois vérifier tout le temps.
Jethro Larson
5

Les 2 demandes simultanées font intentionnellement partie de la conception de nombreux navigateurs. Il existe une norme à laquelle les «bons clients http» adhèrent exprès. Consultez ce RFC pour voir pourquoi.

Josh
la source
Je suis d'accord, il serait probablement préférable de suivre la norme.
palswim
13
Les normes suivantes sont bonnes, mais il en va de même du bon sens et de participer à leur révision : voir trac.tools.ietf.org/wg/httpbis/trac/ticket/131
Julian Reschke
1
Bon point @JulianReschke, mais avec HTTP / 2, il n'est plus nécessaire d'avoir un nombre élevé de connexions par hôte. Voir: http2.github.io/faq/#why-just-one-tcp-connection
David
5

En regardant about:configsur Firefox 33 sur GNU / Linux (Ubuntu), et en cherchant, connectionsj'ai trouvé:

network.http.max-connections: 256

Cela est susceptible de répondre à la partie existe-t-il une limite au nombre de connexions actives par navigateur, dans tous les domaines

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

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

ignoré deux propriétés ...

network.websocket.max-connections: 200

(intéressant, il semble qu'ils ne soient pas limités par serveur mais ont une valeur par défaut inférieure aux connexions http globales)

orique
la source
2

Notez que l'augmentation du nombre maximal de connexions d'un navigateur par serveur à un nombre excessif (comme certains sites le suggèrent) peut et bloque d'autres utilisateurs sur de petits sites avec des plans d'hébergement qui limitent le nombre total de connexions simultanées sur le serveur.

John A.
la source
2

Ma compréhension est que la limite de connexion n'est pas modifiable du côté client. La limite de connexion doit être modifiée sur le serveur pour avoir un effet. Par défaut, de nombreux serveurs n'autorisent que 2 connexions par client unique.

Le client n'est pas le navigateur, c'est la machine client émettant les requêtes TCP / IP.

Pour voir l'effet très clairement, utilisez quelque chose comme JMeter pour lancer un tas d'appels de service Web vers votre hôte de serveur - il acceptera les deux premiers et n'en acceptera pas un autre jusqu'à ce que l'un des deux soit terminé. Ce qui est étonnant, c'est que pour un magasin SOA, c'est critique, mais presque personne n'en est vraiment conscient.

Rodney P. Barbati
la source
1

Il n'y a pas de réponse définitive à cela, car chaque navigateur a sa propre configuration pour cela, et cette configuration peut être modifiée. Si vous effectuez une recherche sur Internet, vous pouvez trouver des moyens de modifier cette limite (généralement, ils sont qualifiés de «méthodes d'amélioration des performances».) Il pourrait être utile de conseiller vos utilisateurs de le faire si cela est requis par votre site Web.

Blixt
la source
Je le répète, cela n'est pas configurable sur le navigateur - ou peut-être, mais n'aura toujours aucun effet. C'est le serveur qui applique les 2 connexions par client, pas le client ni le navigateur sur le client. L'augmentation des connexions sur le navigateur vous permettra d'avoir 2 connexions vers des serveurs plus distincts (c'est-à-dire que vous pourriez télécharger à partir de plusieurs serveurs à la fois, pas de problème). Cependant, vous ne pouvez pas télécharger plus de 2 fichiers à partir d'un même serveur en même temps. Pour ce faire, le serveur doit être modifié.
Rodney P. Barbati
2
Certes, cette réponse est obsolète, mais elle est exacte au moment où elle a été écrite. Tout d'abord, les serveurs limitent rarement de manière significative les connexions par IP, donc je pense que vous vous trompez. Deuxièmement, en 2009, IE 7 était toujours là et il avait un maximum de deux connexions par nom d'hôte. C'était configurable via le registre du système. Même aujourd'hui, les navigateurs ont des limites, et ils sont souvent configurables, mais ces limites sont beaucoup plus élevées qu'à l'époque. Quoi qu'il en soit, avec l'avènement de SPDY / HTTP2, cela est devenu un problème beaucoup plus petit, car les serveurs et les navigateurs implémentent le nouveau protocole.
Blixt
1
  1. Oui, le domaine générique fonctionnera pour vous.
  2. Pas au courant des limites sur les connexions. Les limites éventuelles seront spécifiques au navigateur.
Ryan Oberoi
la source