Pour en savoir plus sur HTTP/2, visionnez l'enregistrement de notre webinaire populaire, Quoi de neuf dans HTTP/2 ?
La vénérable norme HyperText Transfer Protocol, ou HTTP , a désormais été mise à jour. La norme HTTP/2 a été approuvée en mai 2015 et est désormais implémentée dans les navigateurs et les serveurs Web (y compris NGINX Plus et NGINX Open Source ). HTTP/2 est actuellement pris en charge par près des deux tiers de tous les navigateurs Web utilisés, et cette proportion augmente de plusieurs points de pourcentage par mois.
HTTP/2 est basé sur le protocole SPDY de Google, et SPDY reste une option jusqu'à ce que sa prise en charge dans le navigateur Chrome de Google prenne fin début 2016 . NGINX a été un pionnier dans la défense de SPDY et joue désormais le même rôle avec HTTP/2. Notre livre blanc complet, HTTP/2 pour les développeurs d'applications Web (PDF), décrit HTTP/2, montre comment il s'appuie sur SPDY et explique comment l'implémenter.
Les principales fonctionnalités de HTTP/2 sont les mêmes que celles de SPDY :
Vous devez maintenant décider si vous souhaitez passer à HTTP/2 – et cela consiste notamment à savoir comment en tirer le meilleur parti. Cet article de blog vous guidera à travers les aspects liés à la performance du processus de prise de décision et de mise en œuvre. Découvrez ces 7 conseils pour les performances HTTP/2 :
Note : Ni SPDY ni HTTP/2 ne nécessitent TLS, à proprement parler, mais tous deux sont principalement bénéfiques lorsqu'ils sont utilisés avec SSL/TLS, et les navigateurs ne prennent en charge SPDY ou HTTP/2 que lorsque SSL/TLS est utilisé.
La mise en œuvre de HTTP/2 est facile, comme nous le discutons dans notre livre blanc, HTTP/2 pour les développeurs d'applications Web (PDF). Cependant, HTTP/2 n’est pas une solution miracle : il est utile pour certaines applications Web, moins pour d’autres.
L’utilisation de HTTP/2 est susceptible d’améliorer les performances du site Web si vous utilisez SSL/TLS (appelé TLS à partir de maintenant). Mais si ce n’est pas le cas, vous devrez ajouter la prise en charge TLS avant de pouvoir utiliser HTTP/2. Dans ce cas, attendez-vous à ce que la pénalité de performance due à l'utilisation de TLS soit à peu près compensée par l'avantage de performance lié à l'utilisation de HTTP/2, mais testez si cela est vraiment vrai pour votre site avant de prendre une décision de mise en œuvre.
Voici cinq avantages potentiels clés de HTTP/2 :
Et voici cinq inconvénients correspondants que vous rencontrerez :
Tout est une question de performance – et à ce sujet, nous avons de bonnes et de mauvaises nouvelles.
La bonne nouvelle est qu’un premier test interne que nous avons effectué ici chez NGINX montre le résultat que la théorie prédirait : pour les pages Web à contenu mixte demandées via des connexions avec des latences Internet typiques, HTTP/2 fonctionne mieux que HTTP/1.x et HTTPS. Les résultats se répartissent en trois groupes en fonction du temps de trajet aller-retour (RTT) typique de la connexion :
L'image montre le temps écoulé jusqu'à la première visualisation, c'est-à-dire le temps écoulé jusqu'à ce que l'utilisateur voie pour la première fois le contenu de la page Web apparaître à l'écran. Cette mesure est souvent considérée comme essentielle à la perception des utilisateurs de la réactivité d’un site Web.
Pour plus de détails sur nos tests, regardez ma présentation de nginx.conf 2015, Le module HTTP/2 dans NGINX .
Cependant, chaque page Web est différente, et chaque session utilisateur est différente. Si vous avez des médias en streaming ou des fichiers téléchargeables volumineux, ou si vous avez éliminé le sucre de vos optimisations HTTP/1.x (avec toutes nos excuses à The Martian ), vos résultats peuvent être différents, voire opposés.
En fin de compte, vous pourriez trouver que le rapport coût-bénéfice n’est pas clair. Si tel est le cas, apprenez autant que vous le pouvez, effectuez des tests de performance sur votre propre contenu, puis passez une décision. (Pour obtenir des conseils, regardez notre webinaire, Quoi de neuf dans HTTP/2 ? ).
La fin d'un protocole signifie que les clients se connectent à un serveur proxy en utilisant un protocole souhaité, tel que TLS ou HTTP/2. Le serveur proxy se connecte ensuite aux serveurs d'applications, aux serveurs de bases de données, etc. sans nécessairement utiliser le même protocole, comme le montre la figure.
L’utilisation d’un serveur distinct pour la terminaison implique de passer à une architecture multiserveur. Les serveurs peuvent être des serveurs physiques distincts, des serveurs virtuels ou des instances de serveur virtuel dans un environnement cloud tel qu'AWS . Il s’agit d’une augmentation de la complexité par rapport à un serveur unique, ou même à une combinaison serveur d’applications/serveur de base de données. Mais cela offre de nombreux avantages et constitue pratiquement – sans jeu de mots – une nécessité pour les sites très fréquentés.
Une fois qu'un serveur ou un serveur virtuel est placé devant une configuration existante, de nombreuses choses sont possibles. Le nouveau serveur décharge la tâche des communications client des autres serveurs et peut être utilisé pour l'équilibrage de charge, la mise en cache de fichiers statiques et à d'autres fins. Il devient facile d’ajouter et de remplacer des serveurs d’applications et d’autres serveurs selon les besoins.
NGINX et NGINX Plus sont souvent utilisés à toutes ces fins : terminaison de TLS et HTTP/2, équilibrage de charge, etc. L’environnement existant n’a pas besoin d’être modifié du tout, sauf pour le « connecter » au serveur NGINX.
Éditeur – Depuis la publication de cet article de blog, SPDY a atteint la fin du support des principaux navigateurs. Commencer avec SPDY n’est plus une option pour un déploiement à grande échelle.
SPDY est le protocole prédécesseur de HTTP/2, et ses performances globales sont à peu près les mêmes. Parce qu'il existe depuis plusieurs années, plus de navigateurs Web prennent en charge SPDY que HTTP/2 . Cependant, au moment où nous écrivons ces lignes, l’écart se réduit : environ deux tiers des navigateurs Web prennent en charge HTTP/2, tandis qu’environ quatre sur cinq prennent en charge SPDY.
Si vous êtes pressé d’implémenter le nouveau style de protocole de transport Web et que vous souhaitez prendre en charge le plus grand nombre possible d’utilisateurs dès aujourd’hui, vous pouvez commencer par proposer SPDY. Ensuite, début 2016, lorsque la prise en charge de SPDY commencera à être supprimée, vous pourrez passer à HTTP/2 – un changement rapide, du moins avec NGINX. À ce stade, davantage d'utilisateurs utiliseront des navigateurs prenant en charge HTTP/2, vous aurez donc fait ce qu'il y a de mieux pour le plus grand nombre de vos utilisateurs pendant cette transition.
Avant de décider d’implémenter HTTP/2, vous devez identifier la partie de votre base de code optimisée pour HTTP/1.x. Il existe quatre types d’optimisations à surveiller :
Les trois derniers types d'optimisations combinent tous de petits fichiers en fichiers plus grands pour réduire les nouvelles connexions et les échanges d'initialisation, ce qui est particulièrement coûteux pour TLS.
La première optimisation, le partitionnement de domaine, fait le contraire : elle force l’ouverture de davantage de connexions en impliquant des domaines supplémentaires dans l’image. Ensemble, ces techniques apparemment contradictoires peuvent être assez efficaces pour augmenter les performances des sites HTTP/1.x. Cependant, leur conception, leur mise en œuvre, leur gestion et leur exécution nécessitent tous du temps, des efforts et des ressources.
Avant d’implémenter HTTP/2, identifiez où ces optimisations existent et comment elles affectent actuellement la conception des applications et le flux de travail dans votre organisation, afin de pouvoir ensuite les modifier ou les annuler après le passage à HTTP/2.
En fait, déployer HTTP/2 ou SPDY n’est pas si difficile. Si vous êtes un utilisateur NGINX, il vous suffit d'« activer » le protocole dans votre configuration NGINX, comme nous le détaillons pour HTTP/2 dans notre livre blanc, HTTP/2 pour les développeurs d'applications Web (PDF). Le navigateur et le serveur négocieront ensuite pour choisir un protocole, en optant pour HTTP/2 si le navigateur le prend également en charge (et si TLS est utilisé).
Une fois que vous avez implémenté HTTP/2 au niveau du serveur, les utilisateurs des versions de navigateur qui prennent en charge HTTP/2 verront leurs sessions avec votre application Web exécutées sur HTTP/2. Les utilisateurs de versions de navigateur plus anciennes verront leurs sessions exécutées sur HTTP/1.x, comme indiqué dans la figure. Si vous implémentez HTTP/2 ou SPDY pour un site très fréquenté, vous devrez mettre en place des processus pour mesurer les performances avant et après, et annuler le changement s'il a des impacts négatifs importants.
Note : Avec HTTP/2 et son utilisation d'une connexion unique, certains détails de votre configuration NGINX deviennent plus importants. Vérifiez votre configuration NGINX, en accordant une attention particulière au réglage et au test des paramètres de directives telles que output_buffers
, proxy_buffers
et ssl_buffer_size
. Pour obtenir des instructions de configuration générales, consultez Terminaison SSL/TLS NGINX dans le Guide d'administration NGINX Plus. Vous pouvez obtenir des conseils plus spécifiques dans nos blogs Déchargement SSL, chiffrement et certificats avec NGINX et Comment améliorer le référencement avec HTTPS et NGINX . Notre livre blanc, Performances SSL NGINX , explore comment le choix de la taille de la clé du serveur, de l'accord du serveur et du chiffrement en masse affecte les performances.
Note : L'utilisation des chiffrements que vous utilisez avec HTTP/2 peut nécessiter une attention particulière. La RFC pour HTTP/2 contient une longue liste de suites de chiffrement à éviter , et vous préférerez peut-être configurer vous-même la liste de chiffrement. Dans NGINX et NGINX Plus, pensez à régler la directive ssl_ciphers
et à activer ssl_prefer_server_ciphers
, puis à tester la configuration avec les versions de navigateur courantes. Le test Qualys SSL Server analyse la configuration des serveurs Web SSL, mais (en novembre 2015) il n'est pas fiable pour les négociations HTTP/2 .
Étonnamment, annuler ou réviser vos optimisations HTTP/1.x est en fait la partie la plus créative d’une implémentation HTTP/2. Il y a plusieurs questions à prendre en compte et de nombreux degrés de liberté quant à ce qu'il faut faire.
Avant de commencer à apporter des modifications, demandez-vous si les utilisateurs d’anciens navigateurs en souffriront. Dans cet esprit, il existe trois grandes stratégies pour annuler ou réviser les optimisations HTTP/1.x :
La mise en cache est un peu un joker. Théoriquement, la mise en cache fonctionne de manière optimale lorsqu'il existe une pléthore de petits fichiers. Cependant, cela représente beaucoup d’E/S de fichiers. Une certaine concaténation de fichiers étroitement liés peut être judicieuse, à la fois pour le flux de travail et pour les performances de l'application. Réfléchissez attentivement à votre propre expérience et à ce que partagent les autres développeurs lorsqu’ils implémentent HTTP/2.
Le partitionnement de domaine est peut-être la stratégie d’optimisation HTTP/1.x la plus extrême, et probablement aussi la plus réussie. Vous pouvez utiliser une version du partitionnement de domaine qui améliore toujours les performances pour HTTP/1.x mais qui est fondamentalement ignorée, et de manière bénéfique, pour HTTP/2. (Qui ne bénéficie généralement pas du partitionnement de domaine, en raison de l’utilisation d’une seule connexion.)
Pour un partitionnement compatible HTTP/2, effectuez ces deux opérations :
Pour plus de détails, voir RFC 7540 , Hypertext Transfer Protocol Version 2 (HTTP/2) .
Si ces conditions sont réunies, le partitionnement se produira pour HTTP/1.x – les domaines sont suffisamment différents pour inciter les navigateurs à créer des ensembles de connexions supplémentaires – et non pour HTTP/2 ; les domaines distincts sont traités comme un seul domaine et une seule connexion peut accéder à tous.
HTTP/2 et TLS sont susceptibles d'améliorer les performances de votre site et de permettre aux utilisateurs de savoir que leur interaction avec votre site est sécurisée. Que vous soyez le premier de votre groupe à implémenter HTTP/2 ou que vous cherchiez à rattraper vos concurrents, vous pouvez ajouter la prise en charge HTTP/2 rapidement et efficacement.
Utilisez ces conseils pour vous aider à obtenir les meilleures performances HTTP/2 avec le moins d'effort continu, afin que vous puissiez vous concentrer sur la création d'applications rapides, efficaces et sécurisées, faciles à entretenir et à exécuter.
« Cet article de blog peut faire référence à des produits qui ne sont plus disponibles et/ou qui ne sont plus pris en charge. Pour obtenir les informations les plus récentes sur les produits et solutions F5 NGINX disponibles, explorez notre famille de produits NGINX . NGINX fait désormais partie de F5. Tous les liens NGINX.com précédents redirigeront vers un contenu NGINX similaire sur F5.com."