Apache : mise en œuvre du module Brotli
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 :
- Firefox 44 et +
- Chrome 50 et +
- Opera 38 et +
- Edge 15 et +
- Safari 11 et +
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 :