3. L'estensione Cache-Control stale-while-revalidate
Quando presente in una risposta HTTP, l'estensione Cache-Control stale-while-revalidate indica che le cache POSSONO (MAY) servire la risposta in cui appare dopo che è diventata obsoleta, fino al numero di secondi indicato.
stale-while-revalidate = "stale-while-revalidate" "=" delta-seconds
Se una risposta memorizzata nella cache viene servita obsoleta a causa della presenza di questa estensione, la cache DOVREBBE (SHOULD) tentare di riconvalidarla mentre serve ancora risposte obsolete (cioè, senza bloccare).
Si noti che "obsoleto" implica che la risposta avrà un'intestazione Age diversa da zero e un'intestazione di avviso, come da requisiti di HTTP.
Se delta-seconds passa senza che l'entità memorizzata nella cache venga riconvalidata, NON DOVREBBE (SHOULD NOT) continuare a essere servita obsoleta, in assenza di altre informazioni.
3.1. Esempio
Una risposta contenente:
Cache-Control: max-age=600, stale-while-revalidate=30
indica che è fresca per 600 secondi e può continuare a essere servita obsoleta fino a ulteriori 30 secondi mentre viene tentata una convalida asincrona. Se la convalida non è conclusiva o se non c'è traffico che la attiva, dopo 30 secondi la funzione stale-while-revalidate cesserà di funzionare e la risposta memorizzata nella cache sarà "veramente" obsoleta (cioè, la richiesta successiva si bloccherà e sarà gestita normalmente).
Generalmente, i server vorranno impostare la combinazione di max-age e stale-while-revalidate sulla durata totale di freschezza potenziale più lunga che possono tollerare. Ad esempio, con entrambi impostati a 600, il server deve essere in grado di tollerare che la risposta venga servita dalla cache fino a 20 minuti.
Poiché la convalida asincrona avverrà solo se si verifica una richiesta dopo che la risposta è diventata obsoleta, ma prima della fine della finestra stale-while-revalidate, la dimensione di quella finestra e la probabilità di una richiesta durante essa determina quanto è probabile che tutte le richieste vengano servite senza ritardo. Se la finestra è troppo piccola o il traffico è troppo scarso, alcune richieste cadranno al di fuori di essa e si bloccheranno finché il server non potrà convalidare la risposta memorizzata nella cache.