Après avoir lu de nombreux articles et quelques questions ici, j'ai enfin réussi à en activant l'Apache mod_expires
à indiquer au navigateur qu'il DOIT mettre les images en cache pour 1 an.
<filesMatch "\.(ico|gif|jpg|png)$">
ExpiresActive On
ExpiresDefault "access plus 1 year"
Header append Cache-Control "public"
</filesMatch>
Et, heureusement, les réponses du serveur semblent correctes:
HTTP/1.1 200 OK
Date: Fri, 06 Apr 2012 19:25:30 GMT
Server: Apache
Last-Modified: Tue, 26 Jul 2011 18:50:14 GMT
Accept-Ranges: bytes
Content-Length: 24884
Cache-Control: max-age=31536000, public
Expires: Sat, 06 Apr 2013 19:25:30 GMT
Connection: close
Content-Type: image/jpeg
Eh bien, je pensais que ce serait arrêter le navigateur à télécharger et à même de renseigner le serveur sur les images pour 1 an. Mais c'est partiellement vrai: cause si vous fermez et rouvrez le navigateur, le navigateur ne prend PAS télécharger les images à partir du serveur de plus, mais le navigateur encore s'enquiert le serveur d'une requête HTTP pour chaque image.
Comment puis-je forcer le navigateur à arrêter de faire des requêtes HTTP pour chaque image? Même si ces requêtes HTTP ne sont pas suivis d'une image en cours de téléchargement, ils sont encore requêtes faites au serveur que unecessarely icrease de latence et de ralentir le rendu de la page!
Je l'ai déjà dit au navigateur qu'il DOIT conserver les images dans le cache pendant 1 an! Pourquoi ne navigateur toujours renseigner le serveur pour chaque image (même si elle ne permet pas de télécharger l'image)?!
En regardant réseau des graphiques dans FireBug (menu FireBug > Net > Images) je peux voir les différentes mise en cache des comportements (j'ai évidemment commencé avec le cache du navigateur complètement vide, j'ai forcé un cache supprimer sur navigateur à l'aide de "Effacer Tout l'Historique"):
Lorsque la page est chargée pour la 1ère fois toutes les images sont téléchargées (et la même chose se produit si je force un rechargement de la page en cliquant sur le navigateur à recharger la page un bouton). Cela a du sens!
Quand j'ai naviguer sur le site et de revenir à la même page, les images ne sont pas téléchargées à tous et que le navigateur n'a même PAS de renseigner le serveur pour les images. Cela fait sens, (et j'aimerais voir le même comportement lorsque le navigateur est fermé)!
Lorsque je ferme le navigateur et ouvrez-le à nouveau sur la même page, l'idiot du navigateur permet de toute façon de la requête HTTP au serveur une fois par image: il n'est PAS downalod l'image, mais il fait encore une requête HTTP, c'est comme le navigateur demande au serveur sur l'image (serveur répond avec 200 OK). C'est le seul qui m'agace!
J'ai également joindre les graphiques ci-dessous si vous êtes intéressés:
EDIT: viens de tester aussi avec FireFox 11.0 juste pour s'assurer que ce n'était pas un problème de mon FireFox 3.6 être trop vieux. La même chose se passe!!! J'ai aussi testé le site Google et Stackoverflow site, ils le font à la fois d'envoyer l' Cache-Control: max-age=...
mais le navigateur encore fait une requête HTTP vers le serveur pour chaque image une fois que le navigateur est fermé et ouvert de nouveau sur la même page, après la réponse du serveur au navigateur de ne PAS télécharger l'image (comme je l'ai expliqué ci-dessus), mais il est quand même sacrément la demande qui augmente le temps de voir page.
EDIT2: et retrait de l' Last-Modified
- tête comme suggéré ici, ne résout pas le problème, elle ne fait aucune différence.