Mise en cache dans HTTP

Une description détaillée des options de mise en cache disponibles via le protocole HTTP

La mise en cache est une technique qui peut aider les connexions réseau à être plus rapides, car moins il y a de choses à transférer, mieux c'est.

De nombreuses ressources peuvent être très importantes et être très coûteuses en temps et en coût réel (sur mobile, par exemple) à récupérer.

Il existe différentes stratégies de mise en cache mises à disposition par HTTP et utilisées par les navigateurs.

Pas de mise en cache

Premièrement lesCache-Controll'en-tête peut indiquer au navigateur de ne jamais utiliser une version mise en cache d'une ressource sans d'abord vérifier la valeur ETag (plus à ce sujet plus tard), en utilisant leno-cacheévaluer:

Cache-Control: no-cache

Un plus restrictifno-storeL'option indique au navigateur (et à tous les périphériques réseau intermédiaires) de ne même pas stocker la ressource dans son cache:

Cache-Control: no-store

SiCache-Controla lamax-agevalue, qui sert à déterminer le nombre de secondes pendant lesquelles cette ressource est valide en tant que cache:

Cache-Control: max-age=3600

LeExpiresentête

Lorsqu'une requête HTTP est envoyée, le navigateur vérifie s'il a une copie de cette page dans le cache, en fonction de l'URL que vous avez requise.

S'il y en a, il vérifie la page pourfraîcheur.

Une page est fraîche si leRéponse HTTPExpiresentêteLa valeur est inférieure à la date / heure actuelle.

L'en-tête Expires prend la forme suivante:

Expires: Sat, 01 Dec 2018 16:00:00 GMT

GET conditionnel

Il existe différentes manières d'effectuer un get conditionnel. Tous sont basés sur l'utilisation duIf-*en-têtes de demande:

  • utilisantIf-Modified-SinceetLast-Modified
  • utilisantIf-None-MatchetETag

UtilisantIf-Modified-SinceetLast-Modified

Le navigateur peut envoyer une requête au serveur et au lieu de simplement demander la page, il ajoute unIf-Modified-Sinceentête, basé surLast-Modifiedvaleur d'en-tête obtenue à partir de la page actuellement mise en cache.

Cela indique au serveur de ne renvoyer un corps de réponse (le contenu de la page) que si la ressource a été mise à jour depuis cette date.

Sinon, le serveur renvoie un304 Not Modifiedréponse.

UtilisantIf-None-MatchetETag

Le serveur Web (en fonction de la configuration, de la façon dont la page est servie, etc.) peut envoyer unEn-tête ETag.

C'est l'identifiant d'une ressource. Chaque fois que la ressource change, par exemple elle est mise à jour, l'ETag doit également changer.

C'est comme une somme de contrôle.

Le navigateur envoie unIf-None-Matchentêtequi contient une (ou plusieurs) valeur ETag.

Si aucun ne correspond, le serveur renvoie la nouvelle version de la ressource, sinon un304 Not Modifiedréponse.


Plus de didacticiels réseau: