4 2 3 4.Age and Stale
Il campo di intestazione Age viene utilizzato per trasmettere un'età stimata del messaggio di risposta quando ottenuto da una cache. Il valore del campo Age è la stima della cache del numero di secondi trascorsi da quando la risposta è stata generata o validata dal server di origine. In sostanza, il valore Age è la somma del tempo in cui la risposta è rimasta in ciascuna delle cache lungo il percorso dal server di origine, più il tempo in cui è stata in transito lungo i percorsi di rete.
I seguenti dati vengono utilizzati per il calcolo dell'età:
age_value: Il termine "age_value" indica il valore del campo di intestazione Age (Sezione 5.1), in una forma appropriata per operazioni aritmetiche; o 0, se non disponibile.
date_value: Il termine "date_value" indica il valore del campo di intestazione Date, in una forma appropriata per operazioni aritmetiche. Vedere Sezione 7.1.1.2 di [RFC7231] per la definizione del campo di intestazione Date e per i requisiti riguardanti le risposte senza di esso.
now: Il termine "now" significa "il valore corrente dell'orologio sull'host che esegue il calcolo". Un host dovrebbe (ought to) utilizzare NTP ([RFC5905]) o un protocollo simile per sincronizzare i suoi orologi con il Tempo universale coordinato.
request_time: Il valore corrente dell'orologio sull'host al momento in cui è stata effettuata la richiesta che ha portato alla risposta memorizzata.
response_time: Il valore corrente dell'orologio sull'host al momento in cui la risposta è stata ricevuta.
L'età di una risposta può essere calcolata in due modi completamente indipendenti:
-
l'"apparent_age" (età apparente): response_time meno date_value, se l'orologio locale è ragionevolmente ben sincronizzato con l'orologio del server di origine. Se il risultato è negativo, il risultato viene sostituito con zero.
-
il "corrected_age_value" (valore dell'età corretto), se tutte le cache lungo il percorso della risposta implementano HTTP/1.1. Una cache DEVE (MUST) interpretare questo valore relativamente al momento in cui la richiesta è stata avviata, non al momento in cui la risposta è stata ricevuta.
apparent_age = max(0, response_time - date_value);
response_delay = response_time - request_time;
corrected_age_value = age_value + response_delay;
Questi sono combinati come
corrected_initial_age = max(apparent_age, corrected_age_value);
a meno che la cache non sia sicura del valore del campo di intestazione Age (ad esempio, perché non ci sono hop HTTP/1.0 nel campo di intestazione Via), nel qual caso il corrected_age_value PUÒ (MAY) essere utilizzato come corrected_initial_age.
Il current_age di una risposta memorizzata può quindi essere calcolato aggiungendo il tempo (in secondi) trascorso dall'ultima validazione della risposta memorizzata da parte del server di origine al corrected_initial_age.
resident_time = now - response_time;
current_age = corrected_initial_age + resident_time;
4.2.4. Serving Stale Responses (提供过期响应)
🇬🇧 English
A "stale" response is one that either has explicit expiry information or is allowed to have heuristic expiry calculated, but is not fresh according to the calculations in Section 4.2.
A cache MUST NOT generate a stale response if it is prohibited by an explicit in-protocol directive (e.g., by a "no-store" or "no-cache" cache directive, a "must-revalidate" cache-response-directive, or an applicable "s-maxage" or "proxy-revalidate" cache-response-directive; see Section 5.2.2).
A cache MUST NOT send stale responses unless it is disconnected (i.e., it cannot contact the origin server or otherwise find a forward path) or doing so is explicitly allowed (e.g., by the max-stale request directive; see Section 5.2.1).
A cache SHOULD generate a Warning header field with the 110 warn-code (see Section 5.5.1) in stale responses. Likewise, a cache SHOULD generate a 112 warn-code (see Section 5.5.3) in stale responses if the cache is disconnected.
A cache SHOULD NOT generate a new Warning header field when forwarding a response that does not have an Age header field, even if the response is already stale. A cache need not validate a response that merely became stale in transit.