Sposób działania cache

Sposób działania cache

Nagłówek Vary

Nagłówek Vary umożliwia określenie, które elementy wiadomości (poza standardowymi: metodą, adresem i hostem) jednoznacznie identyfikują dany zasób. Jest to szczególnie przydatne podczas korzystania z mechanizmu Content negotiation.

Dla przykładu odpowiedź zawierająca

Vary: accept-language

informuje, że nagłówek accept-language powinien być uwzględniony w kluczu obiektów cache. Może to wynikać z faktu, że nagłówek ten pozwala ustalić z klientem język wyniku zapytania, a więc dla każdego języka odpowiedź może się znacząco różnić.

Nagłówek Vary może przyjmować wartości:

  • * – oznacza, że wszystkie nagłówki mają znaczenie podczas identyfikacji odpowiedzi
  • lista nagłówków – wymienia nagłówki, które mają znaczenie.

Używając nagłówka Vary możemy sprawić, że 2 poniższe zapytania będą przez mechanizm cache rozpatrywane jako różne:

GET /resource HTTP 1.1
Host: example.com
Content-Type: text/html
Accepted-Language: pl-PL
Vary: accept-language
GET /resource HTTP 1.1
Host: example.com
Content-Type: text/html
Accepted-Language: en-US
Vary: accept-language

Serwer powinien definiować pola Vary w odpowiedzi tylko, jeżeli wygenerowana odpowiedź zależy ściśle od wartości tych pól. Jednak nie powinien on uwzględniać pól, które według definicji mają wpływ na powodzenie operacji np. nagłówka Authorization.

Sposób działania

Gdy zostaje wykonane zapytanie do serwera, możliwe jest (pod pewnymi warunkami) skorzystanie z zapamiętanej uprzednio zawartości. Posłużymy się przykładem pobierania zasobu przez przeglądarkę internetową. Odpowiedź przechowywana w cache może być ponownie użyta w przypadku, gdy:

  • jest ona aktualna, poprawnie zwalidowana z serwerem lub może być użyta przeterminowna (stale state). Szczegóły w kolejnym temacie Cache-Control
  • istnieje wpis w cache do szukanego URI i zdefiniowanego (w nagłówku Vary) zbioru nagłówków
  • użyta metoda umożliwia skorzystanie z zapamiętanej poprzednio wartości
  • nie jest użyty nagłówek no-cache
  • nie jest użyte szyfrowane połączenie HTTPS

W pewnych sytuacjach możliwe jest zwrócenie zachowanej odpowiedzi bez sprawdzenia jej aktualności. Tak może być w przypadku zerwania połączenia do serwera. Przeglądarka może wyjść z założenia, ze lepiej pokazać starszą wersją niż błąd ładowania danych.