HTTP Cache Control max-age, must-revalid

J’ai quelques questions liées à Cache-Control.

Si je spécifie Cache-Control max-age=3600, must-revalidate pour un fichier html / js / images / css statique, avec l’en-tête Last Modified défini dans l’en-tête HTTP:

  1. Le cache du navigateur / proxy (comme Squid / Akamai) va-t-il jusqu’au serveur d’origine pour être validé avant l’expiration de max-age ? Ou servira-t-il du contenu du cache jusqu’à l’expiration de max-age?
  2. Après l’expiration de l’âge maximum (expiration du cache), y a-t-il une vérification If-Modified-Since ou le contenu est-il téléchargé de nouveau depuis le serveur d’origine sans If-Modified-Since check?

a) Si le serveur inclut cet en-tête:

 Cache-Control "max-age=3600, must-revalidate" 

il indique aux caches clients et aux caches de proxy qu’une fois le contenu périmé (plus de 3 600 secondes), il doit être revalidé sur le serveur d’origine avant de pouvoir diffuser le contenu. Cela devrait être le comportement par défaut des systèmes de cache, mais la directive must-revalidate rend cette exigence non ambiguë.

b) Le client doit être revalidé. Il peut être revalidé à l’aide des en If-Match têtes If-Match ou If-None-Match avec un ETag ou utiliser les en If-Unmodified-Since têtes If-Modified-Since ou If-Unmodified-Since avec une date.

une. Regardez l’onglet “Statistiques” sur cette page et voyez ce qui se passe.

b. Après expiration, le navigateur vérifiera sur le serveur si le fichier est mis à jour. Sinon, le serveur répondra avec un en-tête 304 Not Modified et rien n’est téléchargé.

Vous pouvez vérifier ce comportement vous-même en consultant le panneau «Net» dans Firebug ou des outils similaires. Entrez simplement l’URL dans la barre d’adresse et comparez le nombre de requêtes HTTP avec le nombre de requêtes lorsque votre cache est vide.