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

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.

4 comments


  • On 17 February at 22:11 Replying to: 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.

    Reply to this message

    • On 30 March at 17:24, by Quentin Drouet Replying to: Expire headers

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

      Reply to this message

      • On 31 March at 16:18, by b_b Replying to: Expire headers

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

        ++

        Reply to this message

        • On 31 March at 17:14, by Quentin Drouet Replying to: 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 ;)

          Reply to this message


Any message or comment?
  • (To create paragraphs, you simply leave blank lines.)

Who are you? (optional)
  • [Sign In]