ADC

Configuration HTTP/2

Remarque : La fonctionnalité HTTP/2 est prise en charge sur les modèles NetScaler MPX, VPX et SDX. Dans une appliance NetScaler VPX, la fonctionnalité HTTP/2 est prise en charge à partir de la version 11.0 de NetScaler.

Le problème des performances des applications Web est directement lié à la tendance à l’augmentation de la taille des pages et du nombre d’objets sur les pages Web. HTTP/1.1 a été développé pour prendre en charge des pages Web plus petites, des connexions Internet plus lentes et un matériel serveur plus limité que ce qui est courant aujourd’hui. Il n’est pas adapté aux nouvelles technologies telles que JavaScript et les feuilles de style en cascade (CSS) ou aux nouveaux types de médias tels que les vidéos Flash et les images riches en graphiques. En effet, il ne peut demander qu’une seule ressource par connexion au serveur. Cette limitation augmente considérablement le nombre d’allers-retours, ce qui allonge le rendu des pages et réduit les performances du réseau.

Le protocole HTTP/2 résout ces limitations en permettant la communication avec moins de données transmises sur le réseau et en offrant la possibilité d’envoyer plusieurs requêtes et réponses via une seule connexion. HTTP/2 résout les principales limitations de HTTP/1.1 en utilisant plus efficacement les connexions réseau sous-jacentes. Il modifie la façon dont les demandes et les réponses circulent sur le réseau.

HTTP/2 est un protocole binaire. Il est plus efficace d’analyser, plus compact sur le fil, et surtout, il est moins sujet aux erreurs, par rapport aux protocoles textuels comme HTTP/1.1. Le protocole HTTP/2 utilise une couche de cadrage binaire qui définit le type de trame et la façon dont les messages HTTP sont encapsulés et transférés entre le client et le serveur. La fonctionnalité HTTP/2 prend en charge l’utilisation de la méthode CONNECT pour établir une connexion tunnel via un seul flux HTTP/2 vers un hôte distant.

Le protocole HTTP/2 inclut de nombreuses modifications améliorant les performances qui améliorent considérablement les performances, en particulier pour les clients se connectant via un réseau mobile.

Le tableau suivant répertorie les principales améliorations de HTTP/2 par rapport à HTTP/1.1 :

Fonctionnalités HTTP/2 Description
Compression d’en-tête Les en-têtes HTTP contiennent beaucoup d’informations répétitives et consomment donc une bande passante inutile pendant la transmission des données. HTTP/2 réduit les besoins en bande passante en comprimant l’en-tête et en minimisant la nécessité de transporter les en-têtes HTTP à chaque requête et réponse.
Multiplexage de connexion La latence peut avoir un impact considérable sur les temps de chargement des pages et sur l’expérience de l’utilisateur final. Le multiplexage des connexions résout ce problème en envoyant plusieurs demandes et réponses via une seule connexion.
Serveur Push Server Push permet au serveur de diffuser du contenu de manière proactive vers le navigateur du client, ce qui évite les retards aller-retour. Cette fonctionnalité met en cache les réponses dont le client pense avoir besoin, réduit le nombre d’allers-retours et améliore le temps de rendu de la page. Important : L’appliance NetScaler ne prend pas en charge la fonctionnalité push du serveur.
Pas de blocage de la tête de ligne Sous HTTP 1.1, les navigateurs peuvent télécharger une ressource à la fois par connexion. Lorsqu’un navigateur doit télécharger une ressource volumineuse, il bloque le téléchargement de toutes les autres ressources jusqu’à ce que le premier téléchargement soit terminé. HTTP/2 résout ce problème avec une approche de multiplexage. Il permet au navigateur client de télécharger d’autres composants Web en parallèle sur la même connexion et de les afficher dès qu’ils sont disponibles.
Priorisation des demandes Toutes les ressources n’ont pas la même priorité lorsque le navigateur affiche une page Web. Pour accélérer le temps de chargement, tous les navigateurs modernes hiérarchisent les demandes par type de ressource, leur emplacement sur la page et même par priorité acquise lors des visites précédentes. Avec HTTP/1.1, le navigateur a une capacité limitée d’utiliser les données de priorité, car ce protocole ne prend pas en charge le multiplexage et il n’y a aucun moyen de communiquer la hiérarchisation des requêtes par le serveur. Il en résulte une latence réseau inutile. HTTP/2 résout ce problème en permettant au navigateur d’envoyer toutes les requêtes. Le navigateur peut communiquer ses préférences de priorisation des flux via des dépendances et des pondérations de flux, ce qui permet aux serveurs d’optimiser la livraison des réponses. Important : L’appliance NetScaler ne prend pas en charge la fonctionnalité de priorisation des demandes.

Fonctionnement de HTTP/2

Une appliance NetScaler prend en charge HTTP/2 côté client ainsi que côté serveur. Du côté client, l’appliance NetScaler agit comme un serveur qui héberge un serveur virtuel HTTP/HTTPS pour HTTP/2. Du côté du back-end, NetScaler agit en tant que client pour les serveurs liés au serveur virtuel.

Par conséquent, l’appliance NetScaler maintient des connexions distinctes côté client et côté serveur. L’appliance NetScaler possède des configurations HTTP/2 distinctes pour le côté client et le côté serveur.

Configuration de l’équilibrage de charge HTTP/2 pour HTTPS (SSL)

Pour une configuration d’équilibrage de charge HTTPS, l’appliance NetScaler utilise l’extension TLS ALPN (RFC 7301) pour déterminer si le client/serveur prend en charge HTTP/2. Si tel est le cas, l’appliance choisit HTTP/2 comme protocole de couche applicative pour transmettre les données (comme décrit dans la RFC 7540 - Section 3.3) côté client/serveur. L’appliance utilise l’ordre de préférence suivant lorsqu’elle choisit le protocole de la couche application via l’extension TLS ALPN :

  • HTTP/2 (s’il est activé dans le profil HTTP)
  • HTTP/1.1

Configuration de l’équilibrage de charge HTTP/2 pour HTTP

Pour une configuration d’équilibrage de charge HTTP, l’appliance NetScaler utilise l’une des méthodes suivantes pour commencer à communiquer avec le client/serveur via HTTP/2.

Remarque

Dans les descriptions de méthodes suivantes, le client et le serveur sont des termes généraux pour une connexion HTTP/2. Par exemple, pour une configuration d’équilibrage de charge d’une appliance NetScaler utilisant HTTP/2, l’appliance NetScaler agit comme un serveur côté client et comme un client côté serveur.

  • Mise àniveau HTTP/2. Un client envoie une requête HTTP/1.1 à un serveur. La demande inclut un en-tête de mise à niveau, qui demande au serveur de mettre à niveau la connexion vers HTTP/2. Si le serveur prend en charge HTTP/2, il accepte la demande de mise à niveau et la notifie dans sa réponse. Le client et le serveur commencent à communiquer via HTTP/2 une fois que le client a reçu la réponse de confirmation de mise à niveau.

  • HTTP/2 direct. Un client commence directement à communiquer avec un serveur en HTTP/2 au lieu d’utiliser la méthode de mise à niveau HTTP/2. Si le serveur ne prend pas en charge HTTP/2 ou n’est pas configuré pour accepter directement les requêtes HTTP/2, il supprime les paquets HTTP/2 du client. Cette méthode est utile si l’administrateur de la machine cliente sait déjà que le serveur prend en charge HTTP/2.

  • HTTP/2 direct à l’aide d’un service alternatif (ALT-SVC). Un serveur annonce qu’il prend en charge HTTP/2 à un client en incluant un champ Alternative Service (ALT-SVC) dans sa réponse HTTP/1.1. Si le client est configuré pour comprendre le champ ALT-SVC, le client et le serveur commencent à communiquer directement via HTTP/2 une fois que le client a reçu la réponse.

L’appliance NetScaler fournit des options configurables dans un profil HTTP pour les méthodes HTTP/2. Ces options HTTP/2 peuvent être appliquées au côté client ainsi qu’au côté serveur d’une configuration d’équilibrage de charge HTTPS ou HTTP. Pour plus d’informations sur les méthodes et options HTTP/2, reportez-vous au PDF des options HTTP/2 .

Avant de commencer

Avant de commencer à configurer HTTP/2 sur une appliance NetScaler, notez les points suivants :

  • L’appliance NetScaler prend en charge HTTP/2 côté client ainsi que côté serveur.
  • L’appliance NetScaler ne prend pas en charge la fonctionnalité push du serveur HTTP/2.
  • L’appliance NetScaler ne prend pas en charge la fonctionnalité de priorisation des requêtes HTTP/2.
  • L’appliance NetScaler ne prend pas en charge la renégociation SSL HTTP/2 pour les configurations d’équilibrage de charge HTTPS.
  • L’appliance NetScaler ne prend pas en charge l’authentification HTTP/2 NTLM.
  • Lorsque HTTP/2 est activé, le multiplexage des connexions désactivé (comme USIP activé) et le mappage individuel des connexions TCP client et serveur, les événements de fermeture tels que FIN, reset (RST) sont transférés de la connexion client ou serveur à la connexion homologue liée.

Configuration de HTTP/2

La configuration de HTTP/2 pour une configuration d’équilibrage de charge (HTTPS ou HTTP) comprend les tâches suivantes :

  • Activez HTTP/2 et définissez des paramètres HTTP/2 facultatifs dans un profil HTTP. Activez HTTP/2 dans un profil HTTP. Lorsque vous activez HTTP/2 uniquement dans un profil HTTP, l’appliance NetScaler utilise uniquement la méthode de mise à niveau (pour HTTP) ou la méthode TLS ALPN (pour HTTPS) pour communiquer en HTTP/2.

    Pour que l’appliance NetScaler utilise la méthode HTTP/2 directe, l’option Direct HTTP/2 doit être activée dans le profil HTTP. Pour que l’appliance NetScaler puisse utiliser le HTTP/2 direct à l’aide de la méthode de service alternative, l’option Service alternatif (altsvc) doit être activée dans le profil HTTP.

  • Liez le profil HTTP à un serveur virtuel ou à un service. Liez le profil HTTP à un serveur virtuel pour configurer HTTP/2 pour le côté client de la configuration de l’équilibrage de charge. Liez le profil HTTP à un service afin de configurer HTTP2 pour le côté serveur de la configuration de l’équilibrage de charge.

Remarque

Citrix recommande de lier des profils HTTP distincts pour le côté client et le côté serveur.

  • Activez le paramètre global pour la prise en charge HTTP/2 côté serveur. Activez le paramètre HTTP global HTTP/2 Service Side(HTTP2ServerSide) pour activer la prise en charge HTTP/2 côté serveur de toutes les configurations d’équilibrage de charge pour lesquelles HTTP/2 est configuré.

    HTTP/2 ne fonctionne pas côté serveur des configurations d’équilibrage de charge si le côté service HTTP/2 est désactivé, même si le protocole HTTP/2 est activé sur le profil HTTP lié aux services d’équilibrage de charge associés.

Procédures deligne de commande NetScaler :

Pour activer HTTP/2 et définir les paramètres HTTP/2 à l’aide de la ligne de commande NetScaler

  • Pour activer HTTP/2 et définir les paramètres HTTP/2 lors de l’ajout d’un profil HTTP, à l’invite de commandes, tapez :

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

  • Pour activer HTTP/2 et définir les paramètres HTTP/2 lors de la modification d’un profil HTTP, à l’invite de commandes, tapez :

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

Pour lier le profil HTTP à un serveur virtuel à l’aide de la ligne de commande NetScaler

À l’invite de commandes, tapez :

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

Pour lier le profil HTTP à un service d’équilibrage de charge à l’aide de la ligne de commande NetScaler

À l’invite de commandes, tapez :

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

Pour activer le support HTTP/2 globalement côté serveur à l’aide de la ligne de commande NetScaler

À l’invite de commandes, tapez :

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

Pour activer HTTP/2 et définir les paramètres HTTP/2 à l’aide de l’interface graphique NetScaler

  1. Accédez à Système > Profils, puis cliquez sur l’onglet Profils HTTP .
  2. Activez HTTP/2 lors de l’ajout d’un profil HTTP ou de la modification d’un profil HTTP existant.

Pour lier le profil HTTP à un serveur virtuel à l’aide de l’interface graphique NetScaler

  1. Accédez à Gestion du trafic > Équilibrage de charge > Serveurs virtuels, puis ouvrez le serveur virtuel.
  2. Dans Paramètres avancés, cliquez sur+Profil HTTP pour lier le profil HTTP créé au serveur virtuel.

Pour lier le profil HTTP à un service d’équilibrage de charge à l’aide de l’interface graphique NetScaler

  1. Accédez à Gestion du trafic > Équilibrage de charge > Service, puis ouvrez le service.
  2. Dans Paramètres avancés, cliquez sur+Profil HTTP pour lier le profil HTTP créé au service.

Pour activer la prise en charge de HTTP/2 globalement côté serveur à l’aide de l’interface graphique

Accédez à Système > Paramètres, cliquez sur Modifier les paramètres HTTP et activez HTTP/2 Server Side.

Exemples de configurations

Dans l’exemple de configuration suivant, HTTP/2 et HTTP/2 direct sont activés sur le profil HTTP HTTP-PROFILE-HTTP2-CLIENT-SIDE. Le profil est lié au serveur virtuel 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-->

Dans l’exemple de configuration suivant, HTTP/2 et le service alternatif (ALT-SVC) sont activés sur le profil HTTP HTTP-PROFILE-HTTP2-SERVER-SIDE. Le profil est lié au service 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-->

Configurer la taille de la fenêtre de connexion initiale HTTP/2

Conformément à la RFC 7540, la fenêtre de contrôle de flux pour le flux HTTP2 et la connexion doit être définie sur 64 K (65535) octets, et toute modification apportée à cette valeur doit être communiquée à l’homologue. L’appliance ADC communique la modification de la taille de la fenêtre de contrôle de flux comme suit :

  • Utiliser le SETTINGS cadre pour le flux.
  • Utilisation du WINDOW_UPDATE cadre pour la connexion.

Dans un profil HTTP, vous devez configurer le paramètre http2InitialWindowSize pour définir la taille initiale de la fenêtre au niveau du flux. En raison d’une erreur système interne, l’appliance ADC initialise également la fenêtre de contrôle de flux de la connexion. En cas de modification de la fenêtre de contrôle de flux configurée pour le flux, l’appliance ADC communique avec l’homologue à l’aide de la trame SETTINGS. Mais l’appliance ADC ne parvient pas à communiquer la modification de la fenêtre de contrôle de flux pour la connexion à l’aide de la WINDOW_UPDATE trame. Cela entraîne un gel de la connexion.

Pour résoudre ce problème, le paramètre http2InitialConnWindowSize (en octets) est maintenant ajouté pour contrôler la fenêtre de contrôle de flux pour la connexion. En utilisant des paramètres configurables distincts, vous pouvez désormais permettre à l’appliance d’envoyer des mises à jour pour modifier la taille de fenêtre au niveau du flux et de la connexion.

Configurer le paramètre de taille de fenêtre de connexion initiale HTTP/2 à l’aide de l’interface de ligne de commande

À l’invite de commandes, tapez :

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-->

Remarque : lorsque HTTP/2 est activé, Citrix vous recommande de désactiver le paramètre TCP Dynamic Receive Buffering dans le profil TCP.

Configuration de WebSocket sur HTTP/2

L’appliance NetScaler prend en charge les connexions WebSocket via HTTP/2. Vous pouvez activer les connexions WebSocket à l’aide de l’interface CLI ou de l’interface graphique. La connexion WebSocket HTTP/2 peut être multiplexée.

Configurez les connexions WebSocket via HTTP/2 à l’aide de l’interface de ligne de commande

Par défaut, le paramètre WebSocket Connections est désactivé. Vous pouvez activer les connexions WebSocket à l’aide de l’interface CLI.

Activez les connexions WebSocket HTTP/2 du frontend :

À l’invite de commandes, tapez :

Pour la configuration SSL :


add httpprofile <http_profile_name> -http2 enabled -websocket enabled

<!--NeedCopy-->

Pour la configuration en texte brut :


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

<!--NeedCopy-->

Activez les connexions WebSocket HTTP/2 du backend :

À l’invite de commandes, tapez :

Pour la configuration SSL :

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

Pour la configuration en texte brut :

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

Configurez les connexions WebSocket via HTTP/2 à l’aide de l’interface graphique

Vous pouvez utiliser la procédure suivante pour activer les connexions WebSocket à l’aide de l’interface graphique.

Modifiez les profils existants :

  1. Accédez à Système>Profils>Profils HTTP.
  2. Sélectionnez le profil souhaité dans les Profils et cliquez sur Modifier.
  3. Dans la section Configurer le profil HTTP, cochezles cases HTTP2 ou DirectHTTP2 .
  4. Activez les connexions WebSocket en cochant la case Activer les connexions WebSocket .

Ajouter de nouveaux profils :

  1. Accédez à Système>Profils>Profils HTTP.
  2. Vous pouvez ajouter un nouveau profil HTTP2 en cliquant sur Ajouter.
  3. Dans la section Créer un profil HTTP, cochezles cases HTTP2 ou DirectHTTP2 .
  4. Cochez la case Activer les connexions WebSocket .

Le tableau suivant décrit le comportement de la connexion WebSocket lorsque le multiplexage principal est désactivé :

Version du paquet HTTP WebSocket dans le profil HTTP Action de demande Backend HTTP/1.1 Backend HTTP/2
HTTP/1.1 Désactivé lâché SO SO
HTTP/1.1 Activé HTTP/1.1 Chaque connexion HTTP/1.1 est mappée à une connexion HTTP/1.1 dédiée sur le backend Connexion HTTP/2 dédiée sur le backend pour chaque connexion HTTP/1.1
HTTP/2 Activé HTTP/2 Chaque flux du front-end est mappé à une connexion HTTP/1.1 dédiée Tous les flux frontaux peuvent être mappés à une seule connexion HTTP/2 ou à un maximum de trois connexions HTTP/2 sur le backend.
HTTP/2 Désactivé lâché SO SO

Le tableau suivant décrit le comportement de la connexion WebSocket lorsque le multiplexage principal est activé :

Version du paquet HTTP WebSocket dans le profil HTTP Action de demande Backend HTTP/1.1 Backend HTTP/2
HTTP/1.1 Désactivé lâché SO SO
HTTP/1.1 Activé HTTP/1.1 Chaque connexion HTTP/1.1 est mappée à une connexion HTTP/1.1 dédiée sur le backend Plusieurs clients HTTP/1.1 peuvent être multiplexés en une seule connexion HTTP/2 ou en plusieurs connexions HTTP/2
HTTP/2 Activé HTTP/2 Chaque flux du front-end est mappé à une connexion HTTP/1.1 dédiée Tous les flux frontaux peuvent être mappés à une seule connexion HTTP/2 ou à plusieurs connexions HTTP/2 sur le backend
HTTP/2 Désactivé lâché SO SO