web-dev-qa-db-fra.com

Contrôle du cache HTTP max-age, must-revalidate

J'ai quelques requêtes 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 Origin pour valider avant l'expiration de max-age? Ou servira-t-il le contenu du cache jusqu'à l'expiration de max-age?
  2. Après l'expiration max-age (c'est-à-dire l'expiration du cache), existe-t-il une vérification If-Modified-Since ou le contenu est-il re-téléchargé à partir du serveur Origin sans vérification If-Modified-Since?
70
nyb

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

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

il indique aux caches client et caches proxy qu’une fois le contenu obsolète (plus de 3 600 secondes), ils doivent revalider auprès du serveur Origin avant de pouvoir servir le contenu. Cela devrait être le comportement par défaut des systèmes de mise en cache, mais le must-revalidate directive rend cette exigence sans ambiguïté.

b) Le client doit revalider. Il pourrait revalider en utilisant le If-Match ou If-None-Match en-têtes avec un ETag, ou il pourrait utiliser le If-Modified-Since ou If-Unmodified-Since en-têtes avec une date.

53
james.garriss

une. Regardez l’onglet ‘Stats’ 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 304 Not Modified en-tête et rien n’est téléchargé.

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

4
Marcel Korpel

Les réponses fournies sont incorrectes, du moins pour les navigateurs Web en 2019.

"Après expiration, le navigateur vérifiera sur le serveur si le fichier est mis à jour" <- pas vrai

J'ai un fichier statique avec "Cache-Control: public, doit revalider, max-age = 864000" et les deux Chrome et Firefox font une demande à chaque fois (et obtiennent un message 304 Non modifié à chaque fois).

0
mhenry1384