La canalización HTTP es una característica de HTTP / 1.1 que permite enviar múltiples solicitudes HTTP a través de una única conexión TCP (protocolo de control de transmisión) sin esperar las respuestas correspondientes. [1] La especificación HTTP / 1.1 requiere que los servidores respondan correctamente a las solicitudes canalizadas, enviando respuestas no canalizadas pero válidas incluso si el servidor no admite canalizaciones HTTP. A pesar de este requisito, muchos servidores HTTP / 1.1 heredados no admiten la canalización correctamente, lo que obliga a la mayoría de los clientes HTTP a no utilizar la canalización HTTP en la práctica.
La técnica fue reemplazada por la multiplexación a través de HTTP / 2 , [2] que es compatible con la mayoría de los navegadores modernos. [3]
En HTTP / 3 , la multiplexación se logra mediante el nuevo protocolo de transporte QUIC subyacente , que reemplaza a TCP . Esto reduce aún más el tiempo de carga, ya que ya no hay bloqueo de cabecera .
Motivación y limitaciones
La canalización de solicitudes da como resultado una mejora espectacular [4] en los tiempos de carga de las páginas HTML, especialmente en conexiones de alta latencia , como las conexiones a Internet por satélite . La aceleración es menos evidente en las conexiones de banda ancha, ya que la limitación de HTTP 1.1 todavía se aplica: el servidor debe enviar sus respuestas en el mismo orden en que se recibieron las solicitudes, por lo que toda la conexión sigue siendo el primero en entrar, primero en salir [1] y Puede ocurrir bloqueo HOL . El funcionamiento asincrónico de HTTP / 2 y SPDY son soluciones para esto. [5] En última instancia, los navegadores no habilitaron la canalización de forma predeterminada, y en 2017 la mayoría de los navegadores admitían HTTP / 2 de forma predeterminada, que usaba multiplexación en su lugar. [2]
Las solicitudes no idempotentes , como las que usan POST
, no deben canalizarse. [6] Las secuencias GET
y las HEAD
solicitudes siempre se pueden canalizar. Una secuencia de otras solicitudes idempotentes como PUT
y DELETE
se puede canalizar o no dependiendo de si las solicitudes en la secuencia dependen del efecto de otras. [1]
La canalización HTTP requiere que tanto el cliente como el servidor lo admitan. Se requieren servidores que cumplan con HTTP / 1.1 para admitir la canalización. Esto no significa que los servidores deban canalizar las respuestas, sino que deben no fallar si un cliente elige canalizar las solicitudes. [7]
Estado de implementación
La canalización se introdujo en HTTP / 1.1 y no estaba presente en HTTP / 1.0. [8]
Implementación en servidores web
La implementación de la canalización en servidores web es una cuestión relativamente simple de asegurarse de que los búferes de red no se descarten entre solicitudes. Por esa razón, la mayoría de los servidores web modernos manejan la canalización sin ningún problema.
Implementación en navegadores web
De todos los navegadores principales, solo Opera basado en el motor de diseño de Presto tenía una implementación completamente funcional que estaba habilitada de forma predeterminada. En todos los demás navegadores, la canalización HTTP está deshabilitada o no implementada. [5]
- Internet Explorer 8 no canaliza solicitudes debido a preocupaciones con respecto a los proxies con errores y el bloqueo de encabezados de línea . [9]
- Internet Explorer 11 no admite la canalización. [10]
- Los navegadores Mozilla (como Mozilla Firefox , SeaMonkey y Camino ) admiten la canalización; sin embargo, está deshabilitado de forma predeterminada. [11] [12] La canalización está deshabilitada de forma predeterminada para evitar problemas con los servidores que se comportan mal. [13] Cuando la canalización está habilitada, los navegadores de Mozilla utilizan algunas heurísticas, especialmente para desactivar la canalización en servidores IIS más antiguos . [14] La compatibilidad con H1 Pipeline se eliminó de Mozilla Firefox en la versión 54. [15]
- Konqueror 2.0 admite canalización, pero está deshabilitado de forma predeterminada. [ cita requerida ]
- Google Chrome anteriormente admitía la canalización, pero se ha deshabilitado debido a errores y problemas con los servidores que se comportan mal. [dieciséis]
- Pale Moon (navegador web) admite la canalización y está habilitado de forma predeterminada. [17]
Implementación en proxies web
La mayoría de los proxies HTTP no canalizan solicitudes salientes. [18]
Algunas versiones del proxy web Squid canalizarán hasta dos solicitudes salientes. Esta funcionalidad se ha desactivado de forma predeterminada y debe activarse manualmente por "motivos de gestión de ancho de banda y registro de acceso". [19] Squid admite múltiples solicitudes de clientes.
El proxy Polipo canaliza las solicitudes salientes. [20]
Tempesta FW, un controlador de entrega de aplicaciones de código abierto , [21] también canaliza solicitudes a servidores backend. [22]
Otras implementaciones
La biblioteca libwww creada por el World Wide Web Consortium (W3C), admite canalización desde la versión 5.1 lanzada el 18 de febrero de 1997. [23]
Otras bibliotecas de desarrollo de aplicaciones que admiten la canalización HTTP incluyen:
- Los módulos de Perl que brindan soporte al cliente para la canalización HTTP son HTTP :: Async y la biblioteca LWPng ( libwww-perl New Generation). [24]
- Microsoft .NET Framework 3.5 admite la canalización HTTP en el módulo
System.Net.HttpWebRequest
. [25] - Clase Qt
QNetworkRequest
, introducida en 4.4. [26]
Algunas otras aplicaciones que actualmente explotan la canalización son:
- Servidor de aplicaciones IceBreak desde BUILD389
- phttpget de FreeBSD (un cliente HTTP canalizado minimalista) [27]
- libcurl anteriormente tenía un soporte limitado para la canalización usando la opción CURLMOPT_PIPELINING, [28] , pero este soporte fue eliminado en la versión 7.65.0 [29]
- portsnap (un sistema de distribución de árbol de ports de FreeBSD )
- Advanced Packaging Tool (APT) admite la canalización. [ cita requerida ]
- Subversion (SVN) tiene soporte opcional para canalización HTTP con el módulo de acceso serf WebDAV (el módulo predeterminado, neon, no tiene soporte para canalización). [30] [31]
- Microsoft Message Queue Server en Windows Server 2003 utiliza canalización en HTTP de forma predeterminada y se puede configurar para usarlo en HTTPS. [32]
- IBM CICS 3.1 da soporte a la canalización HTTP dentro de su cliente. [33]
Las herramientas de prueba que admiten la canalización HTTP incluyen:
- httperf [34]
Ver también
- Conexión persistente HTTP
- WebSocket
- SPDY
Referencias
- ^ a b c "Protocolo de transferencia de hipertexto (HTTP / 1.1): enrutamiento y sintaxis de mensajes" . ietf.org . Consultado el 24 de julio de 2014 .
- ^ a b "Revisión 1330814 | Gestión de conexiones en HTTP / 1.x | MDN" . Documentos web de MDN . Consultado el 19 de marzo de 2018 .
- ^ "Soporte del navegador HTTP2" . Consultado el 9 de marzo de 2017 .
- ^ Nielsen, Henrik Frystyk ; Gettys, Jim ; Baird-Smith, Anselm; Prud'hommeaux, Eric; Miente, Håkon Wium ; Lilley, Chris (24 de junio de 1997). "Efectos de rendimiento de red de HTTP / 1.1, CSS1 y PNG" . Consorcio World Wide Web . Consultado el 14 de enero de 2010 .
- ^ a b Willis, Nathan (18 de noviembre de 2009). "Reducir la latencia HTTP con SPDY" . LWN.net .
- ^ "Conexiones" . w3.org .
- ^ "Preguntas frecuentes sobre la canalización de HTTP / 1.1 ' " .
- ^ "Copia archivada" . Archivado desde el original el 24 de abril de 2016 . Consultado el 16 de abril de 2016 .CS1 maint: copia archivada como título ( enlace )
- ^ "Enlace de retorno de 'Windows Internet Explorer 8 Expert Zone Chat (14 de agosto de 2008) ' " . Microsoft . 14 de agosto de 2008. Archivado desde el original el 4 de diciembre de 2010 . Consultado el 10 de mayo de 2012 .
- ^ "Internet Explorer y límites de conexión" . IEBlog . Consultado el 14 de noviembre de 2016 .
- ^ Red de canalización MozillaZine
- ^ Cheah Chu Yeow. Secretos de Firefox . pag. 180 . ISBN 0-9752402-4-2.
- ^ "Error 264354: habilitar la canalización HTTP de forma predeterminada" . Mozilla . Consultado el 16 de septiembre de 2011 .
- ^ "Código fuente - nsHttpConnection.cpp" . Código fuente de Firefox . Mozilla. 7 de mayo de 2010 . Consultado el 5 de diciembre de 2010 .
- ^ "Error 1340655: eliminar soporte de canalización H1" . Mozilla . Consultado el 22 de marzo de 2017 .
- ^ Canalización HTTP: los proyectos de Chromium
- ^ "La compatibilidad con HTTP / 1 Pipelining se ha eliminado en el foro de Firefox 54 - Pale Moon" . forum.palemoon.org . Consultado el 7 de junio de 2018 .
- ^ Mark Nottingham (20 de junio de 2007). "El estado del almacenamiento en caché de proxy" . Consultado el 16 de mayo de 2009 .
- ^ "squid: directiva de configuración pipeline_prefetch" . Calamar . 9 de noviembre de 2009 . Consultado el 1 de diciembre de 2009 .
- ^ "Polipo - un proxy web de almacenamiento en caché" . Juliusz Chroboczek. 18 de septiembre de 2009 . Consultado el 12 de noviembre de 2009 .
- ^ "Tempesta FW - un controlador de entrega de aplicaciones de Linux" . GitHub . Consultado el 29 de marzo de 2018 .
- ^ "Servidores: lado de Tempesta - tempesta-tech / tempesta Wiki" . Tempesta Technologies INC. 1 de agosto de 2017 . Consultado el 29 de marzo de 2018 .
- ^ Kahan, José (7 de junio de 2002). "Historial de cambios de libwww" . Consorcio World Wide Web . Consultado el 3 de agosto de 2010 .
- ^ "Uso de HTTP :: Async para solicitudes HTTP paralelas (Colin Bradford)" (PDF) . Archivado desde el original (PDF) el 10 de marzo de 2012 . Consultado el 3 de agosto de 2010 .
- ^ System.Net.HttpWebRequest y canalización
- ^ QNetworkRequest Class Reference Archivado el 22 de diciembre de 2009 en Wayback Machine , documentación de Nokia QT
- ^ Utilidad HTTP GET canalizada
- ^ Explicación de la canalización de Curl Archivado el 27 de junio de 2012 en Wayback Machine , documentación para desarrolladores de Curl
- ^ Anuncio de eliminación de canalización de curl Archivado el 5 de febrero de 2021 en Wayback Machine.
- ^ C. Michael Pilato; Ben Collins-Sussman; Brian W. Fitzpatrick (2008). Control de versiones con Subversion . O'Reilly Media . pag. 238. ISBN 0-596-51033-0.
- ^ Justin R. Erenkrantz (2007). "Subversion: Potentes juguetes nuevos" (PDF) .
- ^ "Mensajes HTTP / HTTPS" . Microsoft TechNet . 21 de enero de 2005.
- ^ Cómo el soporte web de CICS maneja la canalización
- ^ "Sitio web HTTP" . Archivado desde el original el 8 de junio de 2012 . Consultado el 1 de octubre de 2010 .
enlaces externos
- RFC 7230 "Protocolo de transferencia de hipertexto (HTTP / 1.1): enrutamiento y sintaxis de mensajes" . ietf.org . Consultado el 24 de julio de 2014 .
- Preguntas frecuentes sobre la canalización de HTTP / 1.1 en mozilla.org
- "Efectos de rendimiento de red de HTTP / 1.1, CSS1 y PNG" en w3.org
- Artículo "Optimización de los tiempos de carga de la página"
- phttpget
- biblioteca serf C