web-dev-qa-db-fra.com

Quelles en-têtes de réponse encouragent 304-Non modifié lors des rechargements?

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?

capture d'écran FF1

1
utt73

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:

  1. Tous situés dans le dossier _/govtrip/site/grphx/_
  2. Ils ont les en-têtes "Etag", "Expires" et "Last-Modified"

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"
_
2
LazyOne

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.

0
Zdenek