2010-08-02 3 views
2

Je suis vraiment confus par tous ces trucs de mise en cache. J'essaye d'installer mod_expires pour réduire le nombre de HTTP Requests de mon site Web au serveur.Pourquoi le navigateur demande-t-il le fichier, même si Apache mod_expires est activé?

J'ai bien fait jusqu'à présent, j'ai installé mod_expires et a écrit un petit fichier .conf à partir des instructions sur http://httpd.apache.org/docs/2.0/mod/mod_expires.html. Par exemple, tous mes fichiers .png, .gif, .jpeg ont un en-tête Cache-Control. Mon résultat attendu était, que le navigateur ne fera aucune GET Request dans la période de temps (donné de la valeur Cache-Control). Mais c'est le cas, 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 à partir du cache interne. Une chose que je ne comprends pas, c'est que le navigateur envoie un Response header: Cache-Control: max-age=0. Est-ce que ça devrait être comme ça?

Voici un exemple complet 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 

Répondre

2

Il ressemble à l'en-tête Expires étant renvoyé par la le serveur est seulement 4 minutes s dans le futur. L'algorithme par lequel les navigateurs décident de faire ou non une requête (basée sur les valeurs Expires) utilise la "proximité" de l'heure actuelle à la date d'expiration - donc à moins que la date d'expiration soit encore loin (semaines, mois , années), vous pouvez être sûr que le navigateur fera une demande pour le fichier.

+0

Merci pour la réponse, je vais donner un coup de feu. Bon point là. – jAndy

+0

Les navigateurs peuvent filtrer le cache en fonction d'un algorithme récemment utilisé, mais sans respecter la date d'expiration alors qu'il est encore dans le cache? Avez-vous une source ou un cas de test pour sauvegarder cela? –

Questions connexes