¿Máximas conexiones http paralelas en un navegador?

465

Estoy creando algunas conexiones suspendidas a un servidor HTTP (cometa, ajax inverso, etc.). Funciona bien, pero veo que el navegador solo permite dos conexiones suspendidas a un dominio dado simultáneamente. Entonces, si un usuario está mirando mi sitio web en la Tab1 de su navegador, y luego intenta cargarlo en la Tab2, ha usado las dos conexiones permitidas a mi sitio.

Creo que puedo hacer algo de dominio de comodines, donde hago que mi servidor http resuelva cualquier dirección de mi sitio como:

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

entonces:

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

todos todavía apuntan a ( www.example.com/webapp) pero el navegador los considera dominios diferentes, por lo que no encuentro el límite de 2 conexiones. ¿Es esto cierto?

Incluso si eso es cierto, ¿hay algún límite para la cantidad de conexiones activas por navegador en todos los dominios? Digamos que uso el esquema anterior: ¿Firefox, por ejemplo, solo permite 24 conexiones paralelas en un momento dado? 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!

Acabo de elegir 24 conexiones / Firefox como ejemplo.

Patrick Mevzek
fuente
3
sí, se llama fragmentación de dominio, que es una estrategia obsoleta en la era de HTTP / 2
Jeff Puckett
La solución aquí es tener solo una conexión suspendida para todas sus actualizaciones de pestañas. Cuando se abre una pestaña, se envía una solicitud de actualizaciones para esa pestaña al servidor, y la pestaña escucha en la conexión principal suspendida en busca de actualizaciones, y solo recoge las que le interesan. Sé que esto no es lo que usted necesita. pregunto, pero pensé que podría ser útil para alguien. :-)
Craigo

Respuestas:

418

Número máximo de conexiones persistentes simultáneas predeterminadas 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

El límite es por servidor / proxy, por lo que su esquema comodín funcionará.

FYI: esto está específicamente relacionado con HTTP 1.1; otros protocolos tienen preocupaciones y limitaciones separadas (es decir, SPDY, TLS, HTTP 2).

Alsciende
fuente
41
Estoy sorprendido. ¿No dice el HTTP 1.1 RFC limitar las conexiones persistentes a 2 por servidor?
Adrian McCarthy
53
Si lo hace Los navegadores recientes ya no se ajustan.
Alsciende
38
Cita (s) para estos límites?
AJ.
19
¿Hay algún límite en las conexiones WebSockets por origen?
Mitar
13
El límite de 2 conexiones por servidor se ha eliminado del 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

fuente: 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
fuente
1
¿Puede el navegador realmente usar estos valores altos si está restringido a un valor más bajo a nivel del sistema operativo? ¿Puede el navegador anular la configuración del sistema operativo? Al igual que en Windows, tiene pocas configuraciones de registro (MaxConnectionsPerServer y MaxConnectionsPer1_0Server) que controlan las conexiones máximas por servidor como se menciona en esta publicación: stackoverflow.com/questions/2960056/…
RBT
Eso resultó ser un problema específico de programación .NET. En cualquier caso, los navegadores de terceros implementan su propio soporte HTTP para que no se vean afectados por los límites de Windows.
thomasrutter
Entonces, como es común que el navegador web abra varias conexiones TCP (~ 6 paralelas) por host para cargar los diferentes recursos más rápido con HTTP 1.1, este no es el caso para HTTP / 2 ya que la multiplexación gana la misma velocidad sobre un TCP ¿conexión?
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

El primer valor es ConnectionsPerHostname y el segundo valor es MaxConnections .

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

Nota: ConnectionsPerHostname es el número máximo de solicitudes HTTP simultáneas que los navegadores harán al mismo dominio. Para aumentar el número de conexiones concurrentes, uno puede alojar recursos (por ejemplo, imágenes) en diferentes dominios. Sin embargo, no puede exceder MaxConnections , el número máximo de conexiones que un navegador abrirá en total, en todos los dominios.

Actualización 2020

Número de conexiones 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]                  |
  • [^ nota1]: probado con 72 solicitudes, 1 dominio (127.0.0.1)
  • [^ nota2]: probado con 1002 solicitudes, 6 solicitudes por dominio * 167 dominios (127.0.0. *)
  • [^ nota3]: cuando se llama en contexto asíncrono, por ejemplo, en la devolución de llamada de setTimeout+ requestAnimationFrame, then...
  • [^ nota4]: de los cuales los últimos 6 son seguimientos (2,4,6 disponibles en 0.5s, 1s, 1.5s respectivamente)
Razan Paul
fuente
11
A partir de la versión 50+, Chrome ahora admite un máximo de 17 conexiones máximas, lo que lo equipara con Firefox y Safari.
Zhaph - Ben Duguid
Creo que esta respuesta es un poco engañosa. El host y el dominio son completamente diferentes. ConnectionsPerHostname significa por subdominio. Entonces, si hay 2 subdominios, usa conexiones adicionales. Si no hay subdominio, entonces significa por dominio.
Don Dilanga
14
¿Es este límite por pestaña de Chrome? ¿O todas las pestañas en una sola instancia de Chrome? ¿O todas las pestañas en todas las instancias de Chrome?
AshD
14

Firefox almacena ese número en esta configuración (lo encuentras en about:config):network.http.max-connections-per-server

Para las conexiones máximas, Firefox almacena eso en esta configuración: network.http.max-connections

palswim
fuente
network.http.max-connectionses 900 por defecto, que no se refiere al número máximo de conexiones paralelas, que a través de pruebas de la versión 52 está todavía 17.
user2867288
3
es en network.http.max-persistent-connections-per-serverrealidad
Lech Osiński
9

Haciendo pruebas en una página vi este comportamiento:

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

Editar: Parece que Firefox 4 debería poder hacer 15 conexiones, pero ese no es el comportamiento que observé.

Jethro Larson
fuente
¿Qué versión de Chrome? 6 o 5?
Husky
Creo que eran 6 pero estoy en el canal de desarrollo y fue hace un rato. Las actualizaciones silenciosas significan que tengo que verificar todo el tiempo.
Jethro Larson
5

Las 2 solicitudes concurrentes son una parte intencional del diseño de muchos navegadores. Existe un estándar que los "buenos clientes http" cumplen a propósito. Echa un vistazo a este RFC para ver por qué.

Josh
fuente
Estoy de acuerdo, probablemente sería mejor seguir el estándar.
palswim
13
Seguir los estándares es bueno, pero también lo es aplicar el sentido común y participar en la revisión de ellos: ver trac.tools.ietf.org/wg/httpbis/trac/ticket/131
Julian Reschke
1
Buen punto @JulianReschke, pero con HTTP / 2 ya no es necesario tener una gran cantidad de conexiones por host. Ver: http2.github.io/faq/#why-just-one-tcp-connection
David
5

Mirando en about:configFirefox 33 en GNU / Linux (Ubuntu), y buscando connections, encontré:

network.http.max-connections: 256

Es probable que responda a la parte : ¿hay algún límite en la cantidad de conexiones activas por navegador en todos los dominios?

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

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

omitió dos propiedades ...

network.websocket.max-connections: 200

(interesante, parece que no están limitados por servidor pero tienen un valor predeterminado menor que las conexiones http globales)

orique
fuente
2

Tenga en cuenta que aumentar las conexiones máximas de un navegador por servidor a un número excesivo (como sugieren algunos sitios) puede bloquear a otros usuarios de sitios pequeños con planes de alojamiento que limitan el total de conexiones simultáneas en el servidor.

John A.
fuente
2

Tengo entendido que el límite de conexión no se puede cambiar en el lado del cliente. El límite de conexión debe cambiarse en el servidor para que tenga algún efecto. Por defecto, muchos servidores solo permitirán 2 conexiones por cliente único.

El cliente no es el navegador, es la máquina del cliente que emite las solicitudes TCP / IP.

Para ver el efecto muy claramente, use algo como JMeter para disparar un montón de llamadas de servicio web al host de su servidor: aceptará las dos primeras y no aceptará otra hasta que se complete una de las dos. Lo sorprendente de esto es que para una tienda SOA, esto es crítico, pero casi nadie lo sabe.

Rodney P. Barbati
fuente
1

No hay una respuesta definitiva a esto, ya que cada navegador tiene su propia configuración para esto, y esta configuración puede modificarse. Si busca en Internet, puede encontrar formas de cambiar este límite (generalmente están marcados como "métodos de mejora del rendimiento"). Puede valer la pena aconsejar a sus usuarios que lo hagan si así lo requiere su sitio web.

Blixt
fuente
Repito, esto no es configurable en el navegador, o puede serlo, pero aún así no tendrá ningún efecto. Es el servidor el que impone las 2 conexiones por cliente, no el cliente ni el navegador del cliente. El aumento de las conexiones en el navegador le permitirá tener 2 conexiones a servidores más distintos (es decir, podría estar descargando desde varios servidores a la vez, no hay problema). Sin embargo, no puede descargar más de 2 archivos de un solo servidor al mismo tiempo. Para hacer eso, el servidor debe ser modificado.
Rodney P. Barbati
2
De acuerdo, esta respuesta está desactualizada, pero es precisa en el momento en que se escribió. Primero, los servidores raramente limitan significativamente las conexiones por IP, así que creo que te equivocas allí. Segundo, en 2009, IE 7 todavía existía y tenía un máximo de dos conexiones por nombre de host. Esto fue configurable a través del registro del sistema. Incluso hoy en día, los navegadores tienen límites, y a menudo son configurables, pero esos límites son mucho más altos que en ese entonces. De todos modos, con la llegada de SPDY / HTTP2, este se ha convertido en un problema significativamente menor a medida que los servidores y navegadores implementan el nuevo protocolo.
Blixt
1
  1. Sí, el dominio comodín funcionará para usted.
  2. No conozco ningún límite en las conexiones. Los límites, si los hay, serán específicos del navegador.
Ryan Oberoi
fuente