Passage des sites gérés par Geonov en HTTP/2


Publié le 11 janvier 2018
Temps de lecture estimé : 2 minutes (459 mots)

Mots-clés associés :Catégories associées :

La configuration des sites Internet gérés par Geonov a été modifiée pour passer au protocole HTTP/2.

HTTP/2

HTTP/2 est une nouvelle version du protocole HTTP repensée pour améliorer en particulier le temps de négociation des connexions HTTPS.

C’est un point important car depuis plusieurs mois, Geonov a automatisé la génération et le renouvellement de certificats Let’s Encrypt pour l’ensemble de ses sites Internet. Cela a permis leur passage en HTTPS, c’est à dire le chiffrement des échanges entre les serveurs et les clients.

Mais HTTPS impose des échanges supplémentaires à chaque requête entre le client et le serveur. Cela allonge donc la durée des échanges.

Pour améliorer cela, HTTP/2 permet d’échanger les requêtes HTTPS via une seule connexion TCP. Ainsi un seul échange est nécessaire pour l’ouverture de la session TCP et pour la couche de chiffrement.

HTTP/2 apporte d’autres améliorations :

  • Les flux sont transmis en binaire et non plus en texte ce qui crée des paquets plus petits.
  • Le serveur peut pousser (“push”) certains fichiers au client avant même que celui-ci ne les demande.

Mise en place

Nginx

Pour configurer le HTTP/2 avec Nginx, il suffit de compiler Nginx avec l’option “–with-http_v2_module” puis de modifier le paramètre “listen” des sites Web en ajoutant le mot-clé “http2” comme ceci :

listen 443 ssl http2;

Apache

Pour configurer le HTTP/2 avec Apache, il faut d’abord installer les librairies “libnghttp2” (ici sous Debian) :

aptitude install libnghttp2-dev

Ensuite il faut compiler Apache avec l’option “–enable-http2” puis activer le module dans la configuration d’Apache :

LoadModule http2_module modules/mod_http2.so

Enfin il faut ajouter la ligne “Protocols h2 http/1.1” dans les “VirtualHost” des sites Web :

<VirtualHost *:443>
	Protocols h2 http/1.1
</VirtualHost>

CT 104 (Serveur Web)

Nos scripts d’installation de Nginx et Apache (CT 104) ont été modifiés en conséquence.

Au sujet du “Push”

Comme écrit précédemment, HTTP/2 permet de pousser des fichiers au client avant même que celui-ci ne les demande.

Cela peut améliorer la vitesse car jusqu’alors, le client récupérait par exemple un fichier “index.html” puis découvrait l’existence d’un fichier de styles CSS qu’il demandait par une nouvelle requête, puis découvrait l’existence d’un script JavaScript qu’il demandait par une nouvelle requête et ainsi de suite.

Grâce au “push”, le concepteur du site Web peut décider d’envoyer ces fichiers au client dès que celui-ci demande la page “index.html”, sans attendre la demande formelle du client pour les autres fichiers.

Pour pousser automatiquement un fichier au client, il faut déclarer un élément “Link” dans le “header” :

Link: </assets/style.css>;rel=preload

Avec Apache, il est possible d’ajouter automatiquement les éléments “Link” dans le “header” à l’aide du module “mod_headers” :

<Location /index.html>
	Header add Link "</assets/styles.css>; rel=preload"
	Header add Link "</assets/image.jpg>; rel=preload"
</Location>
Attention A l'heure actuelle, cette fonctionnalité n'est pas prise en charge par Nginx.