4 2 3 4.Age and Stale
Le champ d'en-tête Age est utilisé pour transmettre un âge estimé du message de réponse lorsqu'il est obtenu à partir d'un cache. La valeur du champ Age est l'estimation du cache du nombre de secondes depuis que la réponse a été générée ou validée par le serveur d'origine. En essence, la valeur Age est la somme du temps pendant lequel la réponse a résidé dans chacun des caches le long du chemin depuis le serveur d'origine, plus le temps qu'elle a passé en transit le long des chemins réseau.
Les données suivantes sont utilisées pour le calcul de l'âge :
age_value : Le terme "age_value" désigne la valeur du champ d'en-tête Age (Section 5.1), sous une forme appropriée pour une opération arithmétique ; ou 0, s'il n'est pas disponible.
date_value : Le terme "date_value" désigne la valeur du champ d'en-tête Date, sous une forme appropriée pour des opérations arithmétiques. Voir Section 7.1.1.2 de [RFC7231] pour la définition du champ d'en-tête Date, et pour les exigences concernant les réponses sans celui-ci.
now : Le terme "now" signifie "la valeur actuelle de l'horloge sur l'hôte effectuant le calcul". Un hôte devrait (ought to) utiliser NTP ([RFC5905]) ou un protocole similaire pour synchroniser ses horloges avec le Temps universel coordonné.
request_time : La valeur actuelle de l'horloge sur l'hôte au moment où la requête résultant en la réponse stockée a été effectuée.
response_time : La valeur actuelle de l'horloge sur l'hôte au moment où la réponse a été reçue.
L'âge d'une réponse peut être calculé de deux manières entièrement indépendantes :
-
l'"apparent_age" (âge apparent) : response_time moins date_value, si l'horloge locale est raisonnablement bien synchronisée avec l'horloge du serveur d'origine. Si le résultat est négatif, le résultat est remplacé par zéro.
-
le "corrected_age_value" (valeur d'âge corrigée), si tous les caches le long du chemin de réponse implémentent HTTP/1.1. Un cache DOIT (MUST) interpréter cette valeur par rapport au moment où la requête a été initiée, et non au moment où la réponse a été reçue.
apparent_age = max(0, response_time - date_value);
response_delay = response_time - request_time;
corrected_age_value = age_value + response_delay;
Ceux-ci sont combinés comme
corrected_initial_age = max(apparent_age, corrected_age_value);
à moins que le cache ne soit confiant dans la valeur du champ d'en-tête Age (par exemple, parce qu'il n'y a pas de sauts HTTP/1.0 dans le champ d'en-tête Via), auquel cas le corrected_age_value PEUT (MAY) être utilisé comme corrected_initial_age.
Le current_age d'une réponse stockée peut alors être calculé en ajoutant le temps (en secondes) depuis que la réponse stockée a été validée pour la dernière fois par le serveur d'origine au corrected_initial_age.
resident_time = now - response_time;
current_age = corrected_initial_age + resident_time;