Articulo de referencia

Canalización HTTP

Diagrama de tiempo de conexión no canalizada vs. conexión canalizada La canalización HTTP es una característica de HTTP/1.1 que permite enviar múltiples solicitudes HTTP a travé...

Diagrama de tiempo de conexión no canalizada vs. conexión canalizada

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 sin esperar las respuestas correspondientes. [1] HTTP/1.1 requiere que los servidores respondan a las solicitudes canalizadas correctamente, con respuestas válidas pero no canalizadas, incluso si el servidor no admite la canalización HTTP. A pesar de este requisito, muchos servidores HTTP/1.1 antiguos no admiten la canalización correctamente, lo que obliga a la mayoría de los clientes HTTP a no utilizar la canalización HTTP.

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 realiza a través de QUIC , que reemplaza a TCP . Esto reduce aún más el tiempo de carga, ya que no hay bloqueos en el comienzo de la línea incluso si se pierden algunos paquetes.

Motivación y limitaciones

La canalización de las solicitudes produce 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 del tipo primero en entrar, primero en salir [1] y puede producirse un bloqueo HOL .

Las operaciones asincrónicas de HTTP/2 y SPDY son una solución para esto. [5] En 2017, la mayoría de los navegadores admitían HTTP/2 de forma predeterminada, que utiliza multiplexación en su lugar. [2]

Las solicitudes no idempotentes como y POSTno deben canalizarse. [6] Las solicitudes de lectura como GETy HEADsiempre pueden canalizarse. Una secuencia de otras solicitudes idempotentes como PUTy DELETEpuede canalizarse 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 la admitan. Los servidores que cumplen con HTTP/1.1 deben producir respuestas válidas a las solicitudes canalizadas, pero es posible que no procesen las solicitudes simultáneamente. [7]

La mayoría de los problemas de pipeline ocurren en nodos intermedios HTTP (salto a salto), es decir, en servidores proxy , especialmente en servidores proxy transparentes (si uno de ellos a lo largo de la cadena HTTP no maneja las solicitudes pipeline correctamente, entonces nada funciona como debería). [8]

El uso de canalización con servidores proxy HTTP generalmente no se recomienda también porque el problema de bloqueo HOL puede realmente ralentizar las respuestas del servidor proxy (ya que las respuestas del servidor deben estar en el mismo orden de las solicitudes recibidas). [1] [9]

Ejemplo : si un cliente envía 4 solicitudes GET canalizadas a un proxy a través de una única conexión y la primera no está en su caché, entonces el proxy tiene que reenviar esa solicitud al servidor web de destino; si las siguientes tres solicitudes se encuentran en su caché, el proxy tiene que esperar la respuesta del servidor web, luego tiene que enviarla al cliente y solo entonces puede enviar también las tres respuestas almacenadas en caché .

Si, en cambio, un cliente abre 4 conexiones a un proxy y envía 1 solicitud GET por conexión (sin utilizar canalización), el proxy puede enviar las tres respuestas almacenadas en caché al cliente en paralelo antes de recibir la respuesta del servidor, lo que reduce el tiempo total de finalización (porque las solicitudes se atienden en paralelo sin problemas de bloqueo de cabecera de línea). [10] La misma ventaja existe en los flujos multiplexados HTTP/2.

Estado de implementación

La canalización se introdujo en HTTP/1.1 y no estaba presente en HTTP/1.0. [11]

Siempre ha habido quejas sobre navegadores, servidores proxy, etc. que no funcionan bien cuando se utilizan solicitudes/respuestas canalizadas, hasta el punto de que durante muchos años (al menos hasta 2011) los desarrolladores de software, ingenieros, expertos web, etc. intentaron resumir los diversos tipos de problemas que notaron, para arreglar las cosas y dar consejos sobre cómo lidiar con la canalización en la Web abierta. [8]

Implementación en navegadores web

De todos los navegadores principales, solo Opera tenía una implementación completamente funcional que estaba habilitada de manera predeterminada. En otros navegadores, la canalización HTTP estaba deshabilitada o no estaba implementada. [5]

  • Internet Explorer 8 no admite solicitudes de canalización debido a preocupaciones con respecto a servidores proxy con errores y bloqueos de cabecera de línea . [9]
  • Internet Explorer 11 no admite la canalización. [12]
  • Los navegadores Mozilla (como Mozilla Firefox , SeaMonkey y Camino ) solían soportar la canalización; sin embargo, se eliminó en Firefox 54. [13] Cuando era compatible, la canalización se deshabilitaba de forma predeterminada para evitar problemas con servidores que se comportaban mal. [14] Si el usuario habilitaba la canalización, los navegadores Mozilla usaban algunas heurísticas, principalmente para desactivar la canalización para servidores Microsoft IIS más antiguos . [15] La eliminación finalmente se adaptó a SeaMonkey.
  • Konqueror 2.0 admite la canalización, pero está deshabilitada de forma predeterminada. [16]
  • Anteriormente Google Chrome admitía la canalización, pero se ha deshabilitado debido a errores y problemas con servidores que se comportaban mal. [17]
  • Pale Moon (navegador web) admite la canalización y está habilitada de forma predeterminada. [18]

Implementación en servidores proxy web

La mayoría de los servidores proxy HTTP no canalizan las solicitudes salientes. [19]

Algunos servidores proxy HTTP, incluidos los servidores proxy HTTP transparentes, pueden gestionar de forma muy deficiente las solicitudes canalizadas (por ejemplo, mezclando el orden de las respuestas canalizadas). [20]

Algunas versiones del proxy web Squid canalizarán hasta dos solicitudes salientes. Esta funcionalidad se ha deshabilitado de forma predeterminada y debe habilitarse manualmente por "razones de administración del ancho de banda y registro de acceso". [21] Squid admite múltiples solicitudes de clientes.

El proxy Polipo canaliza las solicitudes salientes. [22]

Tempesta FW, un controlador de entrega de aplicaciones de código abierto , [23] también canaliza solicitudes a servidores back-end. [24]

Otras implementaciones

La biblioteca libwww, creada por el Consorcio World Wide Web (W3C), admite la segmentación desde la versión 5.1 publicada el 18 de febrero de 1997. [25]

Otras bibliotecas de desarrollo de aplicaciones que admiten la canalización HTTP incluyen:

  • Los módulos de Perl que proporcionan soporte de cliente para canalización HTTP son HTTP::Async y la biblioteca LWPng ( libwww-perl New Generation). [26]
  • Microsoft .NET Framework 3.5 admite la canalización HTTP en el módulo System.Net.HttpWebRequest. [27]
  • Clase QtQNetworkRequest , introducida en 4.4. [28]

Algunas otras aplicaciones que actualmente explotan la canalización son:

  • Servidor de aplicaciones IceBreak desde BUILD389
  • phttpget de FreeBSD (un cliente HTTP canalizado minimalista) [29]
  • Anteriormente, libcurl tenía un soporte limitado para la canalización mediante la opción CURLMOPT_PIPELINING, [30] pero este soporte se eliminó en la versión 7.65.0 [31]
  • portsnap (un sistema de distribución de árboles de puertos de FreeBSD )
  • Advanced Packaging Tool (APT) admite la segmentación. [ cita requerida ]
  • Subversion (SVN) tiene soporte opcional para canalización HTTP con el módulo de acceso WebDAV serf (el módulo predeterminado, neon, no tiene soporte para canalización). [32] [33]
  • Microsoft Message Queue Server 2003 utiliza canalización en HTTP de manera predeterminada y se puede configurar para utilizarla en HTTPS. [34]
  • IBM CICS 3.1 admite la canalización HTTP dentro de su cliente. [35]

Las herramientas de prueba que admiten la canalización HTTP incluyen:

Véase también

Referencias

  1. ^ abcd Fielding, R.; Reschke, J. (2014). Fielding, R.; Reschke, J. (eds.). "Protocolo de transferencia de hipertexto (HTTP/1.1): sintaxis de mensajes y enrutamiento: canalización". ietf.org. doi : 10.17487/RFC7230 . Consultado el 24 de julio de 2014 . {{cite journal}}: Requiere citar revista |journal=( ayuda )
  2. ^ ab "Revisión 1330814 | Gestión de conexiones en HTTP/1.x | MDN". MDN Web Docs . Archivado desde el original el 2018-03-19 . Consultado el 2018-03-19 .
  3. ^ "Soporte de navegador HTTP2" . Consultado el 9 de marzo de 2017 .
  4. ^ Nielsen, Henrik Frystyk ; Gettys, Jim ; Baird-Smith, Anselm; Prud'hommeaux, Eric; Lie, 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 .
  5. ^ ab Willis, Nathan (18 de noviembre de 2009). "Reducción de la latencia HTTP con SPDY". LWN.net .
  6. ^ "Conexiones". w3.org .
  7. ^ "Preguntas frecuentes sobre canalización HTTP/1.1".
  8. ^ de Mark Nottingham (14 de marzo de 2011). "Cómo hacer que la canalización HTTP sea utilizable en la Web abierta" . Consultado el 16 de octubre de 2021 .
  9. ^ ab "Enlace Wayback 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 .
  10. ^ Fielding, R.; Reschke, J. (2014). Fielding, R.; Reschke, J. (eds.). "Protocolo de transferencia de hipertexto (HTTP/1.1): sintaxis de mensajes y enrutamiento: concurrencia". ietf.org. doi : 10.17487/RFC7230 . Consultado el 24 de julio de 2014 . {{cite journal}}: Requiere citar revista |journal=( ayuda )
  11. ^ "Diferencias clave entre HTTP/1.0 y HTTP/1.1". Archivado desde el original el 24 de abril de 2016. Consultado el 16 de abril de 2016 .
  12. ^ "Internet Explorer y límites de conexión". IEBlog . Consultado el 14 de noviembre de 2016 .
  13. ^ Notas de la versión de Firefox 54
  14. ^ "Error 264354: Habilitar la canalización HTTP de forma predeterminada". Mozilla . Consultado el 16 de septiembre de 2011 .
  15. ^ "Código fuente – nsHttpConnection.cpp". Código fuente de Firefox . Mozilla. 7 de mayo de 2010 . Consultado el 5 de diciembre de 2010 .
  16. ^ Emir Arian. Comunicación en Internet: Protocolos y temas relacionados . Consultado el 16 de octubre de 2021 .
  17. ^ Canalización HTTP: los proyectos de Chromium
  18. ^ "Se ha eliminado la compatibilidad con HTTP/1 Pipelining en Firefox 54 - Foro de Pale Moon". forum.palemoon.org . Consultado el 7 de junio de 2018 .
  19. ^ Mark Nottingham (20 de junio de 2007). "El estado del almacenamiento en caché de proxy" . Consultado el 16 de mayo de 2009 .
  20. ^ Mark Nottingham (11 de julio de 2011). «What proxies must do» (Lo que deben hacer los representantes) . Consultado el 16 de octubre de 2021 .
  21. ^ "squid : directiva de configuración pipeline_prefetch". Squid . 9 de noviembre de 2009 . Consultado el 1 de diciembre de 2009 .
  22. ^ "Polipo: un proxy web con almacenamiento en caché". Juliusz Chroboczek. 18 de septiembre de 2009. Consultado el 12 de noviembre de 2009 .
  23. ^ "Tempesta FW: un controlador de entrega de aplicaciones Linux". GitHub . Consultado el 29 de marzo de 2018 .
  24. ^ "Servidores: el lado de Tempesta - tempesta-tech/tempesta Wiki". Tempesta Technologies INC. 1 de agosto de 2017. Consultado el 29 de marzo de 2018 .
  25. ^ Kahan, José (7 de junio de 2002). «Historial de cambios de libwww». World Wide Web Consortium . Consultado el 3 de agosto de 2010 .
  26. ^ "Uso de HTTP::Async para solicitudes HTTP paralelas (Colin Bradford)" (PDF) . Archivado desde el original (PDF) el 2012-03-10 . Consultado el 2010-08-03 .
  27. ^ System.Net.HttpWebRequest y canalización
  28. ^ Referencia de clase QNetworkRequest Archivado el 22 de diciembre de 2009 en Wayback Machine , documentación de Nokia QT
  29. ^ Utilidad HTTP GET canalizada
  30. ^ Explicación de la canalización de Curl Archivado el 27 de junio de 2012 en Wayback Machine , documentación para desarrolladores de Curl
  31. ^ Anuncio de eliminación de la canalización de curl Archivado el 5 de febrero de 2021 en Wayback Machine
  32. ^ C. Michael Pilato; Ben Collins-Sussman; Brian W. Fitzpatrick (2008). Control de versiones con Subversion . O'Reilly Media . pág. 238. ISBN 978-0-596-51033-6.
  33. ^ Justin R. Erenkrantz (2007). "Subversión: Nuevos juguetes poderosos" (PDF) .
  34. ^ "Mensajes HTTP/HTTPS". Microsoft TechNet . 21 de enero de 2005.
  35. ^ Cómo el soporte web de CICS gestiona la segmentación
  36. ^ "Sitio web HTTP". Archivado desde el original el 8 de junio de 2012. Consultado el 1 de octubre de 2010 .
  • RFC 7230 Fielding, R.; Reschke, J. (2014). Fielding, R.; Reschke, J (eds.). "Protocolo de transferencia de hipertexto (HTTP/1.1): sintaxis de mensajes y enrutamiento". ietf.org. doi : 10.17487/RFC7230 . Consultado el 24 de julio de 2014 . {{cite journal}}: Requiere citar revista |journal=( ayuda )
  • Preguntas frecuentes sobre la canalización HTTP/1.1 en mozilla.org
  • "Efectos en el rendimiento de la red de HTTP/1.1, CSS1 y PNG" en w3.org
  • Artículo "Optimización de los tiempos de carga de las páginas"
  • phttpget
  • Biblioteca C de serf
Obtenido de "https://es.wikipedia.org/w/index.php?title=Canalización_HTTP&oldid=1233372693"