Documentation technique : Debian
Documentation basée sur la distribution Debian

> > > > Expire headers

Expire headers

Le mod_expires permet de contrôler le temps d’expiration d’un fichier récupéré par le visiteur lors de la visite d’une page web en modifiant son entête Expires.

Cette entête défini auprès du navigateur client le temps de validité et de persistence du document, lui indiquant combien de temps il est souhaitable qu’il le conserve dans son cache local.

Une correcte configuration de ces directives permettent d’abaisser le nombre de hits sur le serveur car le client utilisera son cache lors de rechargement d’un document qui n’est pas considéré comme expiré.

Configuration fine

Dans un premier temps, on active le module mod_expires d’Apache si ce n’est déjà fait :

  1. sudo a2enmod expires

Puis on lui crée un fichier de configuration dédié :

  1. sudo nano /etc/apache2/conf.d/expires

Dans lequel on ajoute ce contenu :

  1. <IfModule mod_expires.c>
  2. ExpiresActive On
  3. ExpiresDefault "access plus 1 month"
  4.  
  5. # Médias : images, video, audio
  6. ExpiresByType image/gif "access plus 1 month"
  7. ExpiresByType image/png "access plus 1 month"
  8. ExpiresByType image/jpg "access plus 1 month"
  9. ExpiresByType image/jpeg "access plus 1 month"
  10. ExpiresByType video/ogg "access plus 1 month"
  11. ExpiresByType audio/ogg "access plus 1 month"
  12. ExpiresByType video/mp4 "access plus 1 month"
  13. ExpiresByType video/webm "access plus 1 month"
  14.  
  15. # Même si présent dans pas mal de tutos, pose problème :
  16. # https://core.spip.net/issues/2537
  17. ExpiresByType text/html "access plus 0 seconds"
  18. ExpiresByType text/cache-manifest "access plus 0 seconds"
  19.  
  20. # Data
  21. ExpiresByType text/xml "access plus 0 seconds"
  22. ExpiresByType application/xml "access plus 0 seconds"
  23. ExpiresByType application/json "access plus 0 seconds"
  24.  
  25. # Feed RSS et Atom
  26. ExpiresByType application/rss+xml "access plus 1 hour"
  27. ExpiresByType application/atom+xml "access plus 1 hour"
  28.  
  29. # Favicon
  30. ExpiresByType image/x-icon "access plus 1 week"
  31.  
  32. # Webfonts
  33. ExpiresByType application/x-font-ttf "access plus 1 month"
  34. ExpiresByType font/opentype "access plus 1 month"
  35. ExpiresByType application/x-font-woff "access plus 1 month"
  36. ExpiresByType image/svg+xml "access plus 1 month"
  37. ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
  38.  
  39. # CSS and JavaScript
  40. ExpiresByType text/css "access plus 1 year"
  41. ExpiresByType application/javascript "access plus 1 year"
  42. ExpiresByType text/javascript "access plus 1 year"
  43. </IfModule>

Télécharger

Il est ensuite nécessaire de redémarrer Apache de la sorte :

  1. sudo /etc/init.d/apache2 restart

Quelques explications sur les directives ci-dessus

ExpiresActive : active ou désactive la génération des en-têtes Expires et Cache-Control des documents. Sa valeur peut être On ou Off.

ExpiresDefault : définie le temp d’expiration par défaut de tous les documents, s’ils ne sont pas redéfinis ensuite par des directives ExpiresByType.

ExpiresByType : permet de définir au cas par cas par type de document le temps d’expiration.

Pour une description complête de ses directives et la compréhension du fichier exemple ci-dessus, vous pouvez vous référer à la documentation Apache de référence.

  • Auteur :
  • Publié le :
  • Mis à jour : 15/11/15

10 commentaires


  • Le 17 février 2012 à 22:11 En réponse à : Expire headers

    J’ai du désactiver ExpiresByType text/html "modified plus 1 week" notamment à cause de http://core.spip.org/issues/2537 et aussi parce que le privé de SPIP était mis en cache par le navigateur. Assez perturbant.

    Répondre à ce message

    • Le 30 mars 2012 à 17:24, par Quentin Drouet En réponse à : Expire headers

      Ok, je l’ai viré et j’ai mis 1 mois pour js et css

      Répondre à ce message

      • Le 31 mars 2012 à 16:18, par b_b En réponse à : Expire headers

        Hop, je ne sais pas si c’est voulu, mais tu as collé un an pour les js et css là kent1.

        ++

        Répondre à ce message

        • Le 31 mars 2012 à 17:14, par Quentin Drouet En réponse à : Expire headers

          Ouep c’est voulu... ce sont des ressources qui ne changent pas beaucoup... en général

          Et il est mieux à ce moment là de les suffixer par un timestamp (cas sans compression dans Zpip au moins par exemple) ou de changer leur nom (cas de compression dans SPIP par exemple)...

          Mais bon tu es grand (enfin presque) donc tu fais comme tu veux ;)

          Répondre à ce message

  • Le 22 décembre 2015 à 11:17, par JLuc En réponse à : Expire headers

    J’ai eu les mêmes problèmes dans le privé à cause des ’expires’ sur php et html. Du coup j’ai enlevé ces ’expires’ ou ai mis un délai d’1 seconde.

    Mais j’aimerais bien avoir un plus gros délai pour les pages publiques ! D’où ma question :

    Peut on filtrer les directives ’expires’ avec des filtres sur l’url, comme on peut le faire pour d’autres directives du htaccess ?

    Répondre à ce message

    • Le 22 décembre 2015 à 11:29, par JLuc En réponse à : Expire headers

      C’est à dire mettre le IfModule mod_expires.c à l’intérieur d’une directive FilesMatch
      ou bien mettre des critères FilesMatch à l’intérieur du bloc IfModule mod_expires.c.

      Répondre à ce message

      • Le 22 décembre 2015 à 11:52, par JLuc En réponse à : Expire headers

        J’ai trouvé un exemple de code qui conditionne la directive à l’intérieur du if mod_expires :

        <IfModule mod_expires.c>
        ExpiresActive On

        # Images cached for a day...
        ExpiresByType image/gif "access plus 1 day"
        ExpiresByType image/png "access plus 1 day"
        ExpiresByType image/x-icon "access plus 1 day"

        # Make sure dynamic stuff stays so.
        <FilesMatch "\.php$">
        ExpiresByType text/html "now"
        </FilesMatch>
        </IfModule>

        Répondre à ce message

      • Le 22 décembre 2015 à 11:52, par JLuc En réponse à : Expire headers

        J’ai trouvé un exemple de code qui conditionne la directive à l’intérieur du if mod_expires :

        <IfModule mod_expires.c>
        ExpiresActive On

        # Images cached for a day...
        ExpiresByType image/gif "access plus 1 day"
        ExpiresByType image/png "access plus 1 day"
        ExpiresByType image/x-icon "access plus 1 day"

        # Make sure dynamic stuff stays so.
        <FilesMatch "\.php$">
        ExpiresByType text/html "now"
        </FilesMatch>
        </IfModule>

        Répondre à ce message

      • Le 22 décembre 2015 à 11:53, par JLuc En réponse à : Expire headers

        J’ai trouvé un exemple de code (http://www.webpagetest.org/forums/archive/index.php?thread-11902.html) qui conditionne la directive à l’intérieur du if mod_expires :

        <IfModule mod_expires.c>
        ExpiresActive On

        # Images cached for a day...
        ExpiresByType image/gif "access plus 1 day"
        ExpiresByType image/png "access plus 1 day"
        ExpiresByType image/x-icon "access plus 1 day"

        # Make sure dynamic stuff stays so.
        <FilesMatch "\.php$">
        ExpiresByType text/html "now"
        </FilesMatch>
        </IfModule>

        Répondre à ce message

      • Le 22 décembre 2015 à 11:53, par JLuc En réponse à : Expire headers

        J’ai trouvé un exemple de code sur les forums de webpagetest (thread 11902.html) qui conditionne la directive à l’intérieur du if mod_expires :

        <IfModule mod_expires.c>
        ExpiresActive On

        # Images cached for a day...
        ExpiresByType image/gif "access plus 1 day"
        ExpiresByType image/png "access plus 1 day"
        ExpiresByType image/x-icon "access plus 1 day"

        # Make sure dynamic stuff stays so.
        <FilesMatch "\.php$">
        ExpiresByType text/html "now"
        </FilesMatch>
        </IfModule>

        Répondre à ce message

Qui êtes-vous ?
Ajoutez votre commentaire ici
  • Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.