Cache du contenu statique en .htaccess

Rédacté le 19/05/2010 WebDev

Tags: , , , ,

Le temps de chargement des pages est (depuis longtemps) un point crucial dans le développement web. Il existe de nombreuses façons d’accélérer ce temps de chargement, dont une, la mise en cache par le navigateur des éléments statiques.

Le principe :

Sur votre site vous utilisez une feuille de style, des fichiers javascripts ainsi que des images qui sont les mêmes sur plusieurs de vos pages (voir sur toutes…). L’objectif est de ne les servir qu’une seule fois à chaque visiteur.
Pour cela, les navigateurs ont un cache (également appelés « fichiers temporaires »), qui lui permet de réutiliser des éléments qu’il a déjà chargé, pour peu que votre site lui ai indiqué de tenir ce comportement.

Gain estimé :

Les éléments statiques sont assez nombreux et volumineux, que ce soit les librairies javascript (jQuery, les lightbox, etc …) ou encore les images (une belle bannière en header du site, etc …), on accumule les kilo-octets…
Lorsque ces éléments sont mis en cache, le volume de données transférées se voit ainsi divisé par 6 ou 10.

Comment ?

Ce comportement peut être défini dans un fichier .htaccess, voici le code à insérer :

<ifModule mod_headers.c>
  <FilesMatch "\.(js|css|ico|jpg|jpeg|png|gif)$">
    Header set Expires "Thu, 15 Jan 2015 20:00:00 GMT"
    Header unset ETag
    FileETag None
    Header unset Last-Modified
    Header set Cache-Control "max-age=864000, public"
  </FilesMatch>
</ifModule>

Il faut également activer le mod_headers sur le serveur Apache (par ex : « sudo a2enmod headers » sous debian/ubuntu)

Analyse du code :

  • « Header set Expires … » : indique au navigateur un date d’expiration dans un futur (assez) lointain
  • « Header unset ETag » : va nous permettre de débrayer le système de validation de contenu du navigateur, ainsi c’est notre Cache-Control qui va gérer la mise en cache.
  • « FileEtag None » : idem ci-dessus
  • « Header unset Last-Modified » : comme pour les Etag, nous ne voulons pas que ce soit le navigateur qui décide de rafraichir le contenu
  • « Header set Cache-Control … » : Nous indiquons au cache du navigateur que le contenu est valide pendant 10 jours (exprimé en secondes)

Conclusion :

Cette technique est assez simple à mettre en place, permet d’économiser de la bande passante et de servir ses pages plus rapidement à chaque visiteur (à partir de sa seconde page vue…).
Il y a donc tout à gagner en adoptant cette pratique.

4 commentaires to Cache du contenu statique en .htaccess

  • Daz dit :

    Sympa ça, je vais tester ce soir !

    Je suis tout de même surpris que ça ne soit pas indiqué par défaut n’empêche ^^

    • Loïc dit :

      Ce n’est pas un comportement « standard » et cette configuration fait appel à un module apache qui n’est pas activé par défaut.

  • Plutôt intéressant, ça va me servir pour l’un des sites sur lequel je bosse actuellement.
    Sais tu si il y a un moyen d’activer le mod_headers via un .htaccess? je n’ai pas d’accès en SSH.

    Merci.

    Sinon, plutôt sympa ton blog, je viens tout juste de le découvrir et il a l’air d’avoir pas mal de chose intéressante!

    • Loïc dit :

      De mémoire, l’activation du mod_headers ne peut être fait depuis un .htaccess.
      Il ne peut être activé que dans le fichier de config d’apache.
      Je crois comprendre que tu es sur un hébergement mutualisé, certains n’activent pas ce module.

      Bonne continuation ;)

  • Leave a Reply

    Notifiez-moi des commentaires à venir via email. Vous pouvez aussi vous abonner sans commenter.

    Bienvenue sur mon blog.
    Il s'agit avant tout d'une zone de veille pour moi, un lieu où je stocke les astuces qui me serviront à nouveau plus tard.
    Au menu, du PHP, javascript, un peu de CSS et des astuces diverses...