ADC

Configuración HTTP/2

Nota: La funcionalidad HTTP/2 es compatible con los modelos NetScaler MPX, VPX y SDX. En un dispositivo NetScaler VPX, la funcionalidad HTTP/2 se admite a partir de la versión 11.0 de NetScaler.

El problema del rendimiento de las aplicaciones web está directamente relacionado con la tendencia a aumentar el tamaño de la página y el número de objetos en las páginas web. HTTP/1.1 se desarrolló para admitir páginas web más pequeñas, conexiones a Internet más lentas y hardware de servidor más limitado que el habitual en la actualidad. No es adecuado para nuevas tecnologías como JavaScript y hojas de estilo en cascada (CSS) ni para nuevos tipos de medios como vídeos Flash e imágenes con gran cantidad de gráficos. Esto se debe a que solo puede solicitar un recurso por conexión al servidor. Esta limitación aumenta significativamente el número de viajes de ida y vuelta, lo que provoca una representación de páginas más prolongada y una reducción del rendimiento de la red.

El protocolo HTTP/2 aborda estas limitaciones al permitir que la comunicación se produzca con menos datos transmitidos a través de la red y ofrece la posibilidad de enviar varias solicitudes y respuestas a través de una sola conexión. En esencia, HTTP/2 aborda las limitaciones clave de HTTP/1.1 mediante el uso de las conexiones de red subyacentes de forma más eficiente. Cambia la forma en que las solicitudes y las respuestas viajan por la red.

HTTP/2 es un protocolo binario. Es más eficiente de analizar, más compacto en el cable, y lo más importante, es menos propenso a errores, en comparación con protocolos textuales como HTTP/1.1. El protocolo HTTP/2 utiliza una capa de encuadre binario que define el tipo de marco y cómo se encapsulan y transfieren los mensajes HTTP entre el cliente y el servidor. La funcionalidad HTTP/2 admite el uso del método CONNECT para establecer una conexión de túnel a través de un único flujo HTTP/2 a un host remoto.

El protocolo HTTP/2 incluye muchos cambios que mejoran el rendimiento y que mejoran significativamente el rendimiento, en particular para los clientes que se conectan a través de una red móvil.

La siguiente tabla enumera las principales mejoras en HTTP/2 sobre HTTP/1.1:

Funciones HTTP/2 Descripción
Compresión de encabezado Los encabezados HTTP tienen mucha información repetitiva y, por lo tanto, consumen ancho de banda innecesario durante la transmisión de datos. HTTP/2 reduce los requisitos de ancho de banda al comprimir el encabezado y minimizar el requisito de transportar encabezados HTTP con cada solicitud y respuesta.
Multiplexación de conexiones La latencia puede tener un gran impacto en los tiempos de carga de las páginas y en la experiencia del usuario final. La multiplexación de conexiones resuelve este problema mediante el envío de varias solicitudes y respuestas a través de una sola conexión.
Push de servidor La inserción del servidor permite al servidor enviar contenido de forma proactiva al explorador del cliente, evitando retrasos de ida y vuelta. Esta función almacena en caché las respuestas que cree que necesita el cliente, reduce el número de viajes de ida y vuelta y mejora el tiempo de representación de la página. Importante: El dispositivo NetScaler no admite la funcionalidad de inserción del servidor.
Sin bloqueo de encabezamiento En HTTP 1.1, los exploradores pueden descargar un recurso cada vez por conexión. Cuando un explorador tiene que descargar un recurso grande, bloquea la descarga de todos los demás recursos hasta que se complete la primera descarga. HTTP/2 resuelve este problema con un enfoque de multiplexación. Permite al explorador cliente descargar otros componentes web en paralelo a través de la misma conexión y mostrarlos a medida que estén disponibles.
Priorización de solicitudes No todos los recursos tienen la misma prioridad cuando el explorador muestra una página web. Para acelerar el tiempo de carga, todos los exploradores modernos priorizan las solicitudes por tipo de activo, su ubicación en la página e incluso por prioridad aprendida de visitas anteriores. Con HTTP/1.1, el explorador tiene una capacidad limitada para utilizar los datos de prioridad, ya que este protocolo no admite la multiplexación y no hay forma de comunicar la priorización de solicitudes por parte del servidor. El resultado es una latencia de red innecesaria. HTTP/2 resuelve este problema permitiendo que el explorador envíe todas las solicitudes. El explorador puede comunicar su preferencia de priorización de transmisiones a través de dependencias y ponderaciones de transmisión, lo que permite a los servidores optimizar la entrega de respuestas. Importante: El dispositivo NetScaler no admite la funcionalidad de priorización de solicitudes.

Cómo funciona HTTP/2

Un dispositivo NetScaler admite HTTP/2 tanto en el lado del cliente como en el servidor. En el lado del cliente, el dispositivo NetScaler actúa como servidor que aloja un servidor virtual HTTP/HTTPS para HTTP/2. En el lado back-end, NetScaler actúa como cliente de los servidores enlazados al servidor virtual.

Por lo tanto, el dispositivo NetScaler mantiene conexiones independientes tanto en el lado del cliente como en el servidor. El dispositivo NetScaler tiene configuraciones HTTP/2 independientes para el lado del cliente y el lado del servidor.

Configuración de equilibrio de cargas HTTP/2 para HTTPS (SSL)

Para una configuración de equilibrio de carga HTTPS, el dispositivo NetScaler utiliza la extensión TLS ALPN (RFC 7301) para determinar si el cliente/servidor admite HTTP/2. Si lo hace, el dispositivo elige HTTP/2 como protocolo de capa de aplicación para transmitir datos (como se describe en RFC 7540 - Sección 3.3) en el lado cliente/servidor. El dispositivo utiliza el siguiente orden de preferencia al elegir el protocolo de capa de aplicación mediante la extensión ALPN de TLS:

  • HTTP/2 (si está habilitado en el perfil HTTP)
  • HTTP/1.1

HTTP/2 para configuración de equilibrio de cargas HTTP

Para una configuración de equilibrio de carga HTTP, el dispositivo NetScaler utiliza uno de los métodos siguientes para iniciar la comunicación con el cliente/servidor mediante HTTP/2.

Nota

En las descripciones de métodos siguientes, cliente y servidor son términos generales para una conexión HTTP/2. Por ejemplo, para una configuración de equilibrio de carga de un dispositivo NetScaler mediante HTTP/2, el dispositivo NetScaler actúa como servidor del lado del cliente y actúa como cliente del lado del servidor.

  • Actualización HTTP/2. Un cliente envía una solicitud HTTP/1.1 a un servidor. La solicitud incluye un encabezado de actualización, que solicita al servidor que actualice la conexión a HTTP/2. Si el servidor admite HTTP/2, el servidor acepta la solicitud de actualización y se lo notifica en su respuesta. El cliente y el servidor comienzan a comunicarse mediante HTTP/2 después de que el cliente recibe la respuesta de confirmación de actualización.

  • HTTP/2 directo. Un cliente comienza a comunicarse directamente con un servidor en HTTP/2 en lugar de utilizar el método de actualización HTTP/2. Si el servidor no admite HTTP/2 o no está configurado para aceptar directamente solicitudes HTTP/2, descarta los paquetes HTTP/2 del cliente. Este método resulta útil si el administrador del dispositivo cliente ya sabe que el servidor admite HTTP/2.

  • HTTP/2 directo mediante el servicio alternativo (ALT-SVC). Un servidor anuncia que admite HTTP/2 para un cliente mediante la inclusión de un campo de servicio alternativo (ALT-SVC) en su respuesta HTTP/1.1. Si el cliente está configurado para comprender el campo ALT-SVC, el cliente y el servidor comienzan a comunicarse directamente mediante HTTP/2 una vez que el cliente recibe la respuesta.

El dispositivo NetScaler proporciona opciones configurables en un perfil HTTP para los métodos HTTP/2. Estas opciones HTTP/2 se pueden aplicar al lado del cliente, así como al lado del servidor de una configuración de equilibrio de carga HTTPS o HTTP. Para obtener más información sobre los métodos y opciones HTTP/2, consulte el PDF de opciones de HTTP/2.

Antes de comenzar

Antes de empezar a configurar HTTP/2 en un dispositivo NetScaler, tenga en cuenta los siguientes puntos:

  • El dispositivo NetScaler admite HTTP/2 tanto en el lado del cliente como en el servidor.
  • El dispositivo NetScaler no admite la funcionalidad de inserción del servidor HTTP/2.
  • El dispositivo NetScaler no admite la funcionalidad de priorización de solicitudes HTTP/2.
  • El dispositivo NetScaler no admite la renegociación SSL HTTP/2 para las configuraciones de equilibrio de carga HTTPS.
  • El dispositivo NetScaler no admite la autenticación NTLM HTTP/2.
  • Con HTTP/2 habilitado, la multiplexación de conexiones inhabilitada (como USIP habilitada) y el mapeo uno a uno de las conexiones TCP de cliente y servidor, los eventos de cierre como FIN, reinicio (RST) se reenvían desde la conexión del cliente o servidor a la conexión del par vinculado.

Configuración de HTTP/2

La configuración de HTTP/2 para una configuración de equilibrio de carga (HTTPS o HTTP) consiste en las siguientes tareas:

  • Habilite HTTP/2 y establezca parámetros HTTP/2 opcionales en un perfil HTTP. Habilita HTTP/2 en un perfil HTTP. Cuando solo habilita HTTP/2 en un perfil HTTP, el dispositivo NetScaler utiliza únicamente el método de actualización (para HTTP) o el método ALPN de TLS (para HTTPS) para comunicarse en HTTP/2.

    Para que el dispositivo NetScaler utilice el método HTTP/2 directo, la opción HTTP/2 directa debe estar habilitada en el perfil HTTP. Para que el dispositivo NetScaler utilice HTTP/2 directo mediante el método de servicio alternativo, la opción Servicio alternativo (altsvc) debe estar habilitada en el perfil HTTP.

  • Enlace el perfil HTTP a un servidor virtual o a un servicio. Enlace el perfil HTTP a un servidor virtual para configurar HTTP/2 para el lado cliente de la configuración del equilibrio de carga. Enlaza el perfil HTTP a un servicio para configurar HTTP2 para el lado del servidor de la configuración del equilibrio de carga.

Nota

Citrix recomienda vincular perfiles HTTP independientes para el lado del cliente y el lado del servidor.

  • Habilite el parámetro global para la compatibilidad con el servidor HTTP/2. Habilite el parámetro HTTP global del lado del servicio HTTP/2(HTTP2Serverside) para habilitar la compatibilidad con HTTP/2 en el lado del servidor de todas las configuraciones de equilibrio de carga que tengan configurado HTTP/2.

    HTTP/2 no funciona en el lado del servidor de ninguna configuración de equilibrio de carga si HTTP/2 Service Side está inhabilitado aunque HTTP/2 esté habilitado en el perfil HTTP enlazado a los servicios de equilibrio de carga relacionados.

Procedimientos de línea de comandos de NetScaler:

Para habilitar HTTP/2 y establecer parámetros HTTP/2 mediante la línea de comandos de NetScaler

  • Para habilitar HTTP/2 y establecer los parámetros HTTP/2 mientras se agrega un perfil HTTP, en el símbolo del sistema, escriba:

add ns httpProfile <name> - http2 ( ENABLED | DISABLED ) [-http2Direct ( ENABLED | DISABLED )] [-altsvc ( ENABLED | DISABLED )] show ns httpProfile <name>

  • Para habilitar HTTP/2 y establecer los parámetros HTTP/2 mientras se modifica un perfil HTTP, en el símbolo del sistema, escriba:

set ns httpProfile <name> -http2 ( ENABLED | DISABLED ) [-http2Direct ( ENABLED | DISABLED)] [-altsvc (ENABLED | DISABLED )] show ns httpProfile <name>

Para enlazar el perfil HTTP a un servidor virtual mediante la línea de comandos de NetScaler

En la línea de comandos, escriba:

set lb vserver <name> - httpProfileName <string> show lb vserver <name>

Para enlazar el perfil HTTP a un servicio de equilibrio de carga mediante la línea de comandos de NetScaler

En la línea de comandos, escriba:

set service <name> -httpProfileName <string> show service <name>

Para habilitar la compatibilidad con HTTP/2 de forma global en el servidor mediante la línea de comandos de NetScaler

En la línea de comandos, escriba:

set ns httpParam -HTTP2Serverside( ENABLED | DISABLED ) show ns httpParam

Para habilitar HTTP/2 y establecer parámetros HTTP/2 mediante la GUI de NetScaler

  1. Vaya a Sistema > Perfiles y haga clic en la ficha Perfiles HTTP.
  2. Habilite HTTP/2 mientras agregas un perfil HTTP o modificas un perfil HTTP existente.

Para enlazar el perfil HTTP a un servidor virtual mediante la GUI de NetScaler

  1. Vaya a Administración del tráfico > Equilibrio de carga > Servidores virtualesy abra el servidor virtual.
  2. En Configuración avanzada, haga clic en + Perfil HTTP para enlazar el perfil HTTP creado al servidor virtual.

Para enlazar el perfil HTTP a un servicio de equilibrio de carga mediante la GUI de NetScaler

  1. Vaya a Administración del tráfico > Equilibrio de carga > Servicioy abra el servicio.
  2. En Configuración avanzada, haga clic en + Perfil HTTP para enlazar el perfil HTTP creado al servicio.

Para habilitar la compatibilidad con HTTP/2 globalmente en el servidor mediante la interfaz gráfica de usuario

Vaya a Sistema > Configuración, haga clic en Cambiar parámetros HTTP y habilite HTTP/2 Server Side.

Configuraciones de ejemplo

En la siguiente configuración de ejemplo, HTTP/2 y HTTP/2 directo están habilitados en el perfil HTTP HTTP-PROFILE-HTTP2-CLIENT-SIDE. El perfil está enlazado al servidor virtual LB-VS-1.

set ns httpProfile HTTP-PROFILE-HTTP2-CLIENT-SIDE -http2 enabled -http2Direct enabled
Done

set lb vserver LB-VS-1 -httpProfileName HTTP-PROFILE-HTTP2-CLIENT-SIDE

Done
<!--NeedCopy-->

En la siguiente configuración de ejemplo, HTTP/2 y el servicio alternativo (ALT-SVC) están habilitados en el perfil HTTP HTTP-PROFILE-HTTP2-SERVER-SIDE. El perfil está vinculado al servicio LB-SERVICE-1.

set ns httpparam -HTTP2Serverside ENABLED
Done

set ns httpProfile HTTP-PROFILE-HTTP2-SERVER-SIDE -http2 ENABLED -altsvc ENABLED
Done

set service LB-SERVICE-1 -httpProfileName HTTP-PROFILE-HTTP2-SERVER-SIDE
Done
<!--NeedCopy-->

Configurar el tamaño de la ventana de conexión inicial HTTP/2

Según RFC 7540, la ventana de control de flujo para la transmisión y la conexión HTTP2 debe establecerse en 64 K (65535) octetos y cualquier cambio realizado en este valor debe comunicarse al par. El dispositivo ADC comunica el cambio en el tamaño de la ventana de control de flujo de la siguiente manera:

  • Usar el marco SETTINGS para la transmisión.
  • Usar el marco WINDOW_UPDATE para la conexión.

En un perfil HTTP, debe configurar el parámetro http2InitialWindowSize para establecer el tamaño de ventana inicial a nivel de transmisión. Debido a un error interno del sistema, el dispositivo ADC inicializa también la ventana de control de flujo para la conexión. Cuando se produce un cambio en la ventana de control de flujo configurada para la transmisión, el dispositivo ADC se comunica con el par mediante el marco SETTINGS. Sin embargo, el dispositivo ADC no comunica el cambio en la ventana de control de flujo para la conexión mediante el marco WINDOW_UPDATE. Esto lleva a una congelación de la conexión.

Para superar el problema, ahora se agrega el parámetro http2InitialConnWindowSize (en bytes) para controlar la ventana de control de flujo para la conexión. Mediante el uso de parámetros configurables independientes, ahora puede permitir que el dispositivo envíe actualizaciones para cambiar el tamaño de ventana, tanto en los niveles de transmisión como de conexión.

Configure el parámetro de tamaño de ventana de conexión inicial HTTP/2 mediante la CLI

En la línea de comandos, escriba:

set http profile p1 -http2InitialConnWindowSize 8290
Initial window size for stream level flow control, in bytes.
Default value: 65535
Minimum value: 8192
Maximum value: 20971520
<!--NeedCopy-->

Nota: Cuando HTTP/2 está habilitado, Citrix recomienda inhabilitar el parámetro Almacenamiento en búfer de recepción dinámica de TCP en el perfil TCP.

Configuración de WebSocket sobre HTTP/2

El dispositivo NetScaler admite conexiones de WebSocket a través de HTTP/2. Puede habilitar las conexiones de WebSocket mediante la interfaz CLI o GUI. La conexión HTTP/2 de WebSocket se puede multiplexar.

Configure las conexiones de WebSocket a través de HTTP/2 mediante la CLI

De forma predeterminada, el parámetro WebSocket Connections está desactivado. Puede habilitar las conexiones de WebSocket mediante la interfaz CLI.

Habilite las conexiones de WebSocket HTTP/2 de Frontend:

En la línea de comandos, escriba:

Para la configuración de SSL:


add httpprofile <http_profile_name> -http2 enabled -websocket enabled

<!--NeedCopy-->

Para la configuración de texto sin formato:


add httpprofile <http_profile_name> -http2 enabled -http2direct enabled -websocket enabled

<!--NeedCopy-->

Habilite las conexiones de WebSocket HTTP/2 de backend:

En la línea de comandos, escriba:

Para la configuración de SSL:

add httpprofile <http_profile_name> -http2 enabled
set httpparam -http2serverside ON
<!--NeedCopy-->

Para la configuración de texto sin formato:

add httpprofile <http_profile_name> -http2 enabled -http2direct enabled
set httpparam -http2serverside ON
<!--NeedCopy-->

Configure las conexiones de WebSocket a través de HTTP/2 mediante la GUI

Puede utilizar el siguiente procedimiento para habilitar las conexiones de WebSocket mediante la interfaz GUI.

Modifique los perfiles existentes:

  1. Vaya a Sistema > Perfiles > Perfiles HTTP.
  2. Seleccione el perfil requerido en Perfiles y haga clic en Modificar.
  3. En las casillas Configurar perfil HTTP, marque las casillas HTTP2 o DirectHTTP2.
  4. Para habilitar las conexiones de WebSocket, marque la casilla Habilitar conexiones de WebSocket.

Agregue nuevos perfiles:

  1. Vaya a Sistema > Perfiles > Perfiles HTTP.
  2. Puede agregar un nuevo perfil HTTP2 haciendo clic en Agregar.
  3. En las casillas Crear perfil HTTP, marque las casillas HTTP2 o DirectHTTP2.
  4. Marque la casilla Habilitar conexiones de WebSocket.

La siguiente tabla describe el comportamiento de la conexión a WebSocket cuando la multiplexación del backend está inhabilitada:

Versión de paquete HTTP WebSocket en perfil HTTP Solicitar acción Backend HTTP/1.1 Backend HTTP/2
HTTP/1.1 Inhabilitado caído NA NA
HTTP/1.1 Habilitado HTTP/1.1 Cada conexión HTTP/1.1 se asigna a una conexión HTTP/1.1 dedicada en el backend Conexión HTTP/2 dedicada en el backend para cada conexión HTTP/1.1
HTTP/2 Habilitado HTTP/2 Cada transmisión de la interfaz está asignada a una conexión HTTP/1.1 dedicada Todos los flujos de interfaz se pueden asignar a una sola conexión HTTP/2 o a un máximo de tres conexiones HTTP/2 en el backend.
HTTP/2 Inhabilitado caído NA NA

La siguiente tabla describe el comportamiento de la conexión a WebSocket cuando la multiplexación del backend está habilitada:

Versión de paquete HTTP WebSocket en perfil HTTP Solicitar acción Backend HTTP/1.1 Backend HTTP/2
HTTP/1.1 Inhabilitado caído NA NA
HTTP/1.1 Habilitado HTTP/1.1 Cada conexión HTTP/1.1 se asigna a una conexión HTTP/1.1 dedicada en el backend Se pueden multiplexar varios clientes HTTP/1.1 en una sola conexión HTTP/2 o en varias conexiones HTTP/2
HTTP/2 Habilitado HTTP/2 Cada transmisión de la interfaz está asignada a una conexión HTTP/1.1 dedicada Todos los flujos de entrada se pueden asignar a una sola conexión HTTP/2 o a varias conexiones HTTP/2 en el backend
HTTP/2 Inhabilitado caído NA NA
Configuración HTTP/2