Le 22/7/2007, 00:00 mod_expires, où comment économiser de la bande passante
Dans le cadre d’un projet de site pour la poste, il est apparu que le site consommait beaucoup plus de bande passante que prévu. Après une rapide enquête, nous nous sommes aperçus que les navigateurs récents allaient chercher toutes les images, feuilles de style et scripts javascript à chaque chargement de page ...
Il fallait donc trouver la plus élégante façon de demander aux différents navigateurs de garder en cache ces éléments statiques.
et c’est là que je suis tombé, comme il se doit, sur des éléments de références :
La norme HTTP1.1 , utilisée par 100% des navigateurs pour communiquer avec les serveurs web. Cette norme explique comment on peut définir des en-têtes standards pour signaler la date de modification d’un fichier statique, ou ses possibilités de mise en cache.
Le module d’apache mod_expires m’a alors paru la meilleure réponse à ma question
Le module d’apache mod_expires permet de retourner, en plus du contenu habituel, 2 en-têtes HTTP supplémentaire :
Cache-Control : max-age=X et Expires : Y
Ces 2 en-têtes signalent au navigateur que le contenu retourné peut être conservé en cache pendant X secondes, ou jusqu’à la date Y.
Le module mod_expires permet très simplement (lire "dans la configuration d’apache") de choisir pour chaque type de document le temps d’expiration annoncé.
Tout d’abord, on ajoute la configuration dans/etc/apache2/conf.d/expires :
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/gif A172800
ExpiresByType image/jpg A172800
ExpiresByType image/png A172800
ExpiresByType text/javascript A172800
ExpiresByType text/css A172800
ExpiresByType application/x-javascript A172800
</IfModule>Ces commandes signifient que le module est activé, et que pour les images, feuilles de style et documents javascript, ces pages seront marquées comme conservable en cache pendant 2 jours (2*86400 secondes) après leur date d’accès (A)
Enfin, on active le module dans apache2 sous Debian :
a2enmod expires && /etc/init.d/apache2 restartEt voilà !
Pour vérifier le bon fonctionnement de ce module, on peut comparer les en-têtes HTTP retournés avant et après sa configuration :
avant et sans mod_expires :
wget -S http://www.tpcn.fr/images/theme/map_marker_voisins.png
--04:20:27-- http://www.tpcn.fr/images/theme/map_marker_voisins.png
requête HTTP transmise, en attente de la réponse...
HTTP/1.1 200 OK
Date: Sun, 22 Jul 2007 02:20:27 GMT
Server: Apache
Last-Modified: Fri, 13 Jul 2007 12:30:34 GMT
ETag: "178432-318-470d6e80"
Accept-Ranges: bytes
Content-Length: 792
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: image/png
Longueur: 792 [image/png]après et avec mod_expires :
wget -S http://www.tpcn.fr/images/theme/map_marker_voisins.png
--04:27:57-- http://www.tpcn.fr/images/theme/map_marker_voisins.png
requête HTTP transmise, en attente de la réponse...
HTTP/1.1 200 OK
Date: Sun, 22 Jul 2007 02:27:57 GMT
Server: Apache
Last-Modified: Fri, 13 Jul 2007 12:30:34 GMT
ETag: "178432-318-470d6e80"
Accept-Ranges: bytes
Content-Length: 792
Cache-Control: max-age=172800
Expires: Tue, 24 Jul 2007 02:27:57 GMT
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: image/png
Longueur: 792 [image/png]Par ailleurs, on voit une grosse différence dans le nombre de requêtes effectuées sur les images par un parcours de navigation identique avant et après.
Je vous conseille donc vivement d’utiliser ce module dans vos sites à fort trafic.
Thèmes
[Geekland] - [Logiciels Libres] -
Who's there?
Bienvenue sur le blog de Benjamin Sonntag, entrepreneur web, expert Linux et semi-geek amateur de logiciels libres.
Vous trouverez ici des geekeries, des trucs astuces et copinages, des histoires persos et un peu de politique ...
Sur le même sujet ...
- le 4 mai 2010Joli style pour formulaire forcé
- le 25 juin 2010Apple : service push notification HS
- le 20 juillet 2010Arduino, pilote pour panneau de led Sure0832
- le 29 juillet 2010SPIP : mon CMS est compatible IPv6
- le 20 janvierDNS & AlternC - Comment ça marche ?
Chez Aline et ses Animfolies'
- 4 février – Encore 2 pages…
- 29 janvier – Ma page préférée
- 28 janvier – Encore 2 nouvelles pages …
- 26 janvier – 2 nouvelles pages
- 22 janvier – ABCdaire
Sur le navire Octopuce ...
- 17 novembre 2011 – Octopuce SARL recherche un développeur PHP/MySQL
- 23 octobre 2011 – Octopuce à Metz (Libre et Entreprises)
- 23 octobre 2011 – Octopuce à Metz (Libre et Entreprises)
- 19 janvier 2011 – Comment utiliser les hooks de GIT pour mettre à jour automatiquement un site de développement
- 18 janvier 2011 – Hébergement de dépôts GIT sur un serveur via Gitosis
La Quadrature du Net
- 2 février – ACTA : Le Commissaire De Gucht ment au Parlement européen
- 30 janvier – Démontage des mensonges de la Commission européenne sur ACTA
- 26 janvier – ACTA signé par l'UE. Ensemble, nous devons le vaincre !
- 23 janvier – Après SOPA et PIPA aux États-Unis, ACTA arrive au Parlement européen
- 20 janvier – MegaUpload : l'industrie du copyright en guerre contre les créatures qu'elle a enfantées
Des vieux trucs ...
- 7 décembre 2009 – J’achète beaucoup de couteaux, je suis un tueur en série
- 5 janvier 2010 – Google, Akamai, At&T : Nous sommes des organes visqueux sans intelligence
- 10 décembre 2009 – Lettre Ouverte de la Quadrature - ACTA, accord secret, menaces contre nos libertés
- 29 décembre 2009 – 26c3. Day 2 : Un panneau de LED sur Microcontrolleur !
- 27 December 2009 – 26C3, Day1 : a kit to make a 3D Printer





