Apache : mise en œuvre du module Brotli

BrotliApache : mise en œuvre du module Brotli est un système de compression sans perte. Il a été utilisé par Google pour compresser les fichiers de fontes de type WOFF2. A partir d’Apache 2.4.26, il constitue une méthode alternative à la compression deflate utilisée jusqu’à présent pour minimiser le transfert de données entre le serveur et le navigateur.

Installation sur Fedora 28

A l’occasion du passage de la Fedora 27 à la 28, j’ai découvert que le mod_brotli s’était automatiquement installé avec Apache. Vous pouvez vérifier avec la commande :

find / -name mod_brotli.so

Le chargement du module se fait à partir du fichier /etc/httpd/conf.modules.d/00-base.conf, dans lequel vous trouverez cette directive :

LoadModule brotli_module modules/mod_brotli.so

Une configuration ciselée en fonction du User-Agent

La compression Brotli est supportée par les versions des navigateurs suivants :

J’ai fait le choix d’appliquer la compression selon les types MIME et la version du navigateur. Il est très inutile de compresser les images gif, jpe?g et png.

<If "%{HTTP_USER_AGENT} =~ m# (Edge/(1[5-9]|[2-9][0-9])\.[0-9]{5}|Firefox/[4-9][0-9]\.[0-9]|Chrome/[5-9][0-9]\.[0-9]\.[0-9]{4}\.[0-9]{3}|OPR/[3-9][0-9]\.[0-9]\.[0-9]{4}\.[0-9]{2}|Safari/(60[4-9]|[7-9][0-9]{2})\.[0-9](\.[0-9]{2})?)($| )#">
	AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/css text/javascript text/xml image/svg+xml
	AddOutputFilterByType BROTLI_COMPRESS application/javascript application/xml application/xhtml+xml application/rss+xml
</If>
<Else>
	AddOutputFilterByType DEFLATE text/html text/plain text/css text/javascript text/xml image/svg+xml
	AddOutputFilterByType DEFLATE application/javascript application/xml application/xhtml+xml application/rss+xml
</Else>

Il est recommandé, dans la configuration, Apache d’ajouter ces deux lignes, afin de permettre d’accéder aux contenus derrière un proxy si le navigateur ne prend pas en charge la compression et si vous utilisez le User-Agent pour gérer des exclusions :

Header append Vary User-Agent
Header append Vary Accept-Encoding

Je vais jeter un œil dans les jours qui viennent à quelques modules intéressants comme :

Documentation

Apache  / Lamp