En regardant la cascade de réseau dans Firebug/Chrome/IE9, je vois toujours "200-OK" au lieu de "304-Non modifié" pour de nombreux fichiers pouvant être mis en cache (images, js, css) sur cette page, par exemple .
Je crois que c'est parce que le navigateur n'envoie pas de If-Modified-Since pendant la demande, n'est-ce pas? Dois-je modifier quelque chose dans les en-têtes de réponse initiaux pour que le processus 304 se produise?
Je crois que c'est parce que le navigateur n'envoie pas de If-Modified-Since pendant la demande, n'est-ce pas?
Correct.
Dois-je modifier quelque chose dans les en-têtes de réponse initiaux pour que le processus 304 se produise?
Oui. Si vous comparez les en-têtes de réponse d'origine pour les ressources qui ont un code de réponse 304 lors de demandes ultérieures, vous remarquerez:
/govtrip/site/grphx/
_Le premier moment indique qu'il est fort probable que ce dossier contienne un fichier .htaccess qui définit ces en-têtes (ou une section distincte ailleurs dans le fichier de configuration pour ce dossier).
Si vous examinez les en-têtes request de ces ressources avec un code de réponse 304, vous verrez la présence des en-têtes "If-Modified-Since" et "If-None-Match". Sur la base de ces "If- *" en-têtes Apache décide comment répondre à la demande. Je suis sûr - vous pouvez maintenant voir un motif - très facile de repérer quelles valeurs sont utilisées et où.
Resource: /govtrip/site/grphx/system_green.gif
Réponse originale:
_Etag: "AAAAS9z9Emo"
Expires: Thu, 14 Jun 2012 18:24:24 GMT
Last-Modified: Wed, 20 Apr 2011 17:29:45 GMT
_
demande ultérieure:
_If-Modified-Since: Wed, 20 Apr 2011 17:29:45 GMT
If-None-Match: "AAAAS9z9Emo"
_
D'après mon expérience, les navigateurs n'utilisent jamais l'en-tête If-Modified-Since
. Je ne l'ai vu que envoyé par des robots, tels que Googlebot. Pour obtenir des téléchargements conditionnels, répondez d'abord avec ETag: hash-here
, puis faites attention à If-None-Match: hash-here
dans les requêtes qui en résultent pour la même URL. Le cache doit d'abord expirer avant qu'un téléchargement conditionnel soit émis. Veillez donc à utiliser les en-têtes appropriés et à expiration immédiate.
Remarque: Il existe également un en-tête If-Match
. Celui-ci est utilisé uniquement avec des téléchargements partiels et empêche la corruption en vous permettant de détecter que le fichier a changé et que la reprise n'est plus possible. Dans les situations avancées, il peut même vous laisser choisir le fichier à reprendre.