Pourquoi le navigateur demande-t-il un fichier, même si Apache mod_expires est activé?

Je suis vraiment confus par tout ce qui se passe dans la mémoire cache. J’essaie de configurer mod_expires pour réduire le nombre de HTTP Requests de mon site Web au serveur.

J’ai bien fait jusqu’à présent, j’ai installé mod_expires et écrit un petit fichier .conf à partir des instructions sur http://httpd.apache.org/docs/2.0/mod/mod_expires.html .

Maintenant, par exemple, tous mes fichiers .png, .gif, .jpeg ont un en Cache-Control tête Cache-Control . Le résultat escompté était que le navigateur ne fasse aucune GET Request dans le délai imparti (à partir de la valeur Cache-Control ). Mais il le fait, chaque fichier déclenche une requête et reçoit HTTP 304 not Modified .

C’est le mauvais comportement n’est-ce pas? Il devrait charger ces fichiers du cache interne. Une chose que je ne comprends pas, c’est que le navigateur envoie un en- Response header : Cache-Control: max-age=0 . Est-ce que ça devrait être comme ça?

Voici un exemple complet d’en- Request + Response headers pour un seul .png file :

Demande

 Host dev-mgg.localdomain User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 Accept image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language de-de,de;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding gzip,deflate Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive 115 Connection keep-alive Referer http://dev-mgg.localdomain/css/global/icons.css?18224 Cookie IR_SQLPwdStore=; IR_SQLUser=sysadm If-Modified-Since Thu, 24 Jul 2008 06:24:11 GMT If-None-Match "4010127-3c4-452bf1aefd8c0" Cache-Control max-age=0 

Réponse

 Date Mon, 02 Aug 2010 14:00:28 GMT Server Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny8 with Suhosin-Patch mod_perl/2.0.4 Perl/v5.10.0 Connection Keep-Alive Keep-Alive timeout=15, max=59 Etag "4010127-3c4-452bf1aefd8c0" Expires Mon, 02 Aug 2010 14:04:28 GMT Cache-Control max-age=240 

Il semble que l’en-tête Expires renvoyé par le serveur ne soit plus que 4 minutes à l’avenir. L’algorithme par lequel les navigateurs Web décident de faire ou non une demande (basé sur les valeurs Expires) utilise la “proximité” de l’heure actuelle à la date d’expiration – donc, sauf si la date d’expiration est encore longue , ans), vous pouvez être sûr que le navigateur fera une demande pour le fichier.