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.