4 2 3 4.Age and Stale
Das Age-Header-Feld wird verwendet, um ein geschätztes Alter der Antwortnachricht zu übermitteln, wenn sie aus einem Cache bezogen wird. Der Age-Feldwert ist die Schätzung des Caches für die Anzahl der Sekunden seit der Erzeugung oder Validierung der Antwort durch den Ursprungsserver. Im Wesentlichen ist der Age-Wert die Summe der Zeit, die die Antwort in jedem der Caches entlang des Pfads vom Ursprungsserver verweilte, plus der Zeit, die sie auf Netzwerkpfaden unterwegs war.
Die folgenden Daten werden für die Altersberechnung verwendet:
age_value: Der Begriff "age_value" bezeichnet den Wert des Age-Header-Felds (Abschnitt 5.1) in einer für arithmetische Operationen geeigneten Form; oder 0, falls nicht verfügbar.
date_value: Der Begriff "date_value" bezeichnet den Wert des Date-Header-Felds in einer für arithmetische Operationen geeigneten Form. Siehe Abschnitt 7.1.1.2 von [RFC7231] für die Definition des Date-Header-Felds und für Anforderungen bezüglich Antworten ohne dieses.
now: Der Begriff "now" bedeutet "der aktuelle Wert der Uhr auf dem Host, der die Berechnung durchführt". Ein Host sollte (ought to) NTP ([RFC5905]) oder ein ähnliches Protokoll verwenden, um seine Uhren mit der koordinierten Weltzeit zu synchronisieren.
request_time: Der aktuelle Wert der Uhr auf dem Host zum Zeitpunkt, als die Anfrage gestellt wurde, die zur gespeicherten Antwort führte.
response_time: Der aktuelle Wert der Uhr auf dem Host zum Zeitpunkt, als die Antwort empfangen wurde.
Das Alter einer Antwort kann auf zwei völlig unabhängige Arten berechnet werden:
-
das "apparent_age" (scheinbare Alter): response_time minus date_value, wenn die lokale Uhr vernünftig gut mit der Uhr des Ursprungsservers synchronisiert ist. Wenn das Ergebnis negativ ist, wird das Ergebnis durch Null ersetzt.
-
der "corrected_age_value" (korrigierte Alterswert), wenn alle Caches entlang des Antwortpfads HTTP/1.1 implementieren. Ein Cache MUSS (MUST) diesen Wert relativ zur Zeit interpretieren, zu der die Anfrage initiiert wurde, nicht zur Zeit, zu der die Antwort empfangen wurde.
apparent_age = max(0, response_time - date_value);
response_delay = response_time - request_time;
corrected_age_value = age_value + response_delay;
Diese werden kombiniert als
corrected_initial_age = max(apparent_age, corrected_age_value);
es sei denn, der Cache ist sicher im Wert des Age-Header-Felds (z. B., weil es keine HTTP/1.0-Hops im Via-Header-Feld gibt), in diesem Fall DARF (MAY) der corrected_age_value als corrected_initial_age verwendet werden.
Das current_age einer gespeicherten Antwort kann dann berechnet werden, indem die Zeit (in Sekunden) seit der letzten Validierung der gespeicherten Antwort durch den Ursprungsserver zum corrected_initial_age addiert wird.
resident_time = now - response_time;
current_age = corrected_initial_age + resident_time;