Aktualność obiektu w cache

Aktualność obiektu w cache

Obiekt w cache możemy nazwać aktualnym, jeżeli nie minął jeszcze jego termin ważności. Czas ten jest liczony od momentu pobrania zasobu do momentu określonego przez nagłówki takie jak Expires lub Cache-Control. Jeżeli serwer chce spowodować unieważnienie zachowanego obiektu, powinien on wysłać datę ważności z przeszłości. Dzięki temu podczas najbliższego sprawdzania poprawności lub pobierania zawartości zasobu zostanie on bezwzględnie odświeżony (pobrany ponownie z serwera).

Do momentu aż minie czas ważności danego obiektu wszelkie żądania jego pobrania spowodują skorzystanie z zapamiętanej w cache wartości. Data użyta podczas definiowania czasu ważności, zawsze jest zapisana w strefie czasowej GMT lub UTC. Wskazuje na to skrót na końcu daty, który jest obowiązkowy. Przeciwdziała to problemom z niezgodnością stref czasowych serwera i klienta.

Czas życia może być ustalony za pomocą następujących nagłówków:

  1. dla współdzielonego cache’u używana jest dyrektywa s-max-age w Cache-Content
  2. dla zwykłego – max-age
  3. nagłówek Expires
  4. gdy żaden z wymienionych nagłówków nie wystąpi (czyli serwer w swojej odpowiedzi na zapytanie nie zdefiniuje czasu życia obiektu), zostanie użyta heurystyka do wyliczenia domniemanego czasu ważności

Heurystyczna metoda wyliczania czasu życia zależy od klienta (przeglądarki) z którego korzystamy, jednak często wykorzystuje ona obecność innych nagłówków, które mogą być wskazówką dla daty ważności całego zasobu. Możemy rozpoznać, że czas życia został obliczony, dzięki nagłówkowi:

Warning: 113 - "Heuristic Expiration"

W przypadku, gdy z jakichkolwiek powodów niemożliwe jest odświeżenie rekordu, przeglądarka może zwrócić nieaktualną wartość, dodając nagłówek:

Warning: 110 - "Response is Stale"
Nagłówek Age

Przekazuje informację o tym jak długo (w sekundach) obiekt będzie jeszcze aktualny w cache. Pole jest definiowane po stronie serwera, jednak klient przed użyciem go może dokonać pewnej modyfikacji wartości ze względu na opóźnienie sieciowe.