Aller au contenu principal

3. L'extension Cache-Control stale-while-revalidate

Lorsqu'elle est présente dans une réponse HTTP, l'extension Cache-Control stale-while-revalidate indique que les caches PEUVENT servir la réponse dans laquelle elle apparaît après qu'elle soit devenue périmée, jusqu'au nombre de secondes indiqué.

stale-while-revalidate = "stale-while-revalidate" "=" delta-seconds

Si une réponse mise en cache est servie périmée en raison de la présence de cette extension, le cache DEVRAIT tenter de la revalider tout en continuant à servir des réponses périmées (c'est-à-dire sans blocage).

Notez que "périmé" implique que la réponse aura un en-tête Age non nul et un en-tête d'avertissement, conformément aux exigences de HTTP.

Si delta-seconds s'écoule sans que l'entité mise en cache ne soit revalidée, elle NE DEVRAIT PAS continuer à être servie périmée, en l'absence d'autres informations.

3.1. Exemple

Une réponse contenant :

Cache-Control: max-age=600, stale-while-revalidate=30

indique qu'elle est fraîche pendant 600 secondes, et qu'elle peut continuer à être servie périmée jusqu'à 30 secondes supplémentaires pendant qu'une validation asynchrone est tentée. Si la validation n'est pas concluante, ou s'il n'y a pas de trafic qui la déclenche, après 30 secondes, la fonction stale-while-revalidate cessera de fonctionner et la réponse mise en cache sera "vraiment" périmée (c'est-à-dire que la prochaine requête bloquera et sera traitée normalement).

Généralement, les serveurs voudront définir la combinaison de max-age et stale-while-revalidate à la plus longue durée de vie de fraîcheur potentielle totale qu'ils peuvent tolérer. Par exemple, avec les deux réglés sur 600, le serveur doit pouvoir tolérer que la réponse soit servie depuis le cache jusqu'à 20 minutes.

Puisque la validation asynchrone ne se produira que si une requête survient après que la réponse est devenue périmée, mais avant la fin de la fenêtre stale-while-revalidate, la taille de cette fenêtre et la probabilité d'une requête pendant celle-ci déterminent la probabilité que toutes les requêtes soient servies sans délai. Si la fenêtre est trop petite ou si le trafic est trop rare, certaines requêtes tomberont en dehors de celle-ci et bloqueront jusqu'à ce que le serveur puisse valider la réponse mise en cache.