Vous connaissez sans doute le HTTP2 qui résout pas mal de soucis qu'avait le HTTP 1.1 sorti en 1999. Pour résumer, les requêtes en HTTP2 peuvent être envoyées en rafale durant la même connexion TCP (multiplexage) et les réponses peuvent être reçues dans le désordre, éliminant ce besoin de connexions multiples entre 1 client et le serveur. Le client (donc le navigateur) peut indiquer au serveur quelles sont les ressources qui sont le plus importantes pour lui, afin de les recevoir en priorité. Les entêtes HTTP sont compressées, et le serveur peut envoyer des ressources au client, même si celui-ci ne lui a rien demandé.

Bref, une bonne avancée depuis le HTTP qui permet d'accélérer vraiment le web. Voici donc un modeste article qui va vous expliquer comment l'activer sur votre serveur Apache.

Mais avant de commencer, vous devez garder en tête que tous les navigateurs ne supportent pas le HTTP2. Les navigateurs anciens accéderont toujours à votre site via HTTP 1.x.. HTTP2 requiert aussi un certificat SSL valide, car accessible uniquement via la couche TLS. Enfin, le multiplexage s'active site par site.

Je vais donc commencer par Apache et partir du principe que vous êtes comme d'habitude sous Ubuntu. Moi je suis en Ubuntu 16.04 et quand je tente d'activer le module Apache http2 avec la commande :

sudo a2enmod http2

J'obtiens ceci  comme message :

HTTP2 étant considéré encore comme quelque chose d'expérimental sous Ubuntu 16.04, il va falloir ajouter quelques dépôts Xenial dans votre sources.list :

sudo nano /etc/apt/sources.list

et ajoutez les lignes suivantes à la fin du fichier :

deb-src http://archive.ubuntu.com/ubuntu/ xenial main universe restricted multiverse

deb-src http://security.ubuntu.com/ubuntu xenial-security main universe restricted multiverse

deb-src http://archive.ubuntu.com/ubuntu/ xenial-updates main universe restricted multiverse

Faites ensuite un

sudo apt-get update

sudo apt-get upgrade

Ensuite, on va installer la lib http2 et télécharger les sources d'Apache et compiler tout ça :

sudo apt-get install libnghttp2-dev

mkdir apache2

cd apache2

sudo apt-get source apache2

sudo apt-get build-dep apache2

cd apache-2.4.18

sudo fakeroot debian/rules binary

Et une fois que le module est compilé, copiez-le au bon endroit

sudo cp ./debian/apache2-bin/usr/lib/apache2/modules/mod_http2.so /usr/lib/apache2/modules/

Ensuite il faut signifier à Apache l'existence de ce module. Pour cela, éditez le fichier :

sudo nano /etc/apache2/mods-available/http2.load

Et ajoutez-y la conf suivante :

LoadModule http2_module /usr/lib/apache2/modules/mod_http2.so

<IfModule http2_module>

LogLevel http2:info

</IfModule>

Et maintenant on peut activer le fameux module http2 :

sudo a2enmod http2

Maintenant, il faut ajouter le protocole http2 pour chaque virtualhost en SSL. Par exemple pour le virtual host par défaut en SSL, éditez le fichier :

sudo nano /etc/apache2/sites-enabled/default-ssl.conf

Et ajoutez-y la ligne

Protocols h2 http/1.1

Comme ceci :

A faire partout là où c'est nécessaire (sur les sites en SSL). Ou alors si vraiment vous êtes sûr de votre coup, vous pouvez activer http2 sur l'ensemble de vos sites en éditant le fichier

sudo nano /etc/apache2/apache2.conf

Et en y ajoutant la ligne

Protocols h2 http/1.1

Une fois que tout cela est fait, il ne vous reste plus qu'à relancer Apache avec la commande suivante :

service apache2 restart

Et voilà, votre serveur supporte le http2 et pour tester vos sites, vous pouvez le faire via cet outil.