Nagłówki cache

Nagłówki cache

Age

W przypadku, gdy jako wynik zapytania jest zwracany zasób przechowywany w cache, nagłówek ten mówi nam, ile czasu (w sekundach) minęło od pobrania treści rekordu.

Cache-Control

Jest on stosowany do sterowania zachowaniem cache. Może posiadać niżej wymienione parametry:

max-age – wskazuje jak długi czas życia (w sekundach) przechowywanego zasobu jest akceptowalny; może być używany zarówno w zapytaniach jak i odpowiedziach. Ustawienie max-age: 0 powoduje, że zasób jest dynamiczny i nie podlega cache’owaniu. Jednak nie powinniśmy tego nadużywać, bo dla większości zasobów jest możliwe ustalenie pewnego okresu trwałości, choćby 10 sekund. Nawet dla zasobów, wymagających pełnej aktualności.

s-maxage – działa podobnie jak max-age, przy czym odwołuje się do współdzielonego cache’u.

max-stale – oznacza, że klient jest gotowy na odczytanie z cache’u zasobu, który jest nieaktualny przez maksymalną zdefiniowaną ilość sekund. Pozwala na zdefiniowanie dodatkowego czasu używania zasobu z cache.

min-fresh – pozwala pobrać wartość, która będzie jeszcze aktualna co najmniej przez określoną ilość sekund.

no-cache – informuje, że do wykonania tego zapytania nie powinien być wykorzystany cache.

no-store – informuje, że żaden fragment odpowiedzi nie powinien być zapisywany w cache.

no-transform – oznacza, że serwery pośrednie nie powinny przekształcać tej wiadomości. Nie powinny też próbować korzystać z cache dla tego rekordu, ani dodawać informacji o aktualności rekordu (Age). Dodatkowo niektóre serwery proxy mogą chcieć dokonywać transformacji przesyłanych treści, np. kompresji obrazów. Ta opcja zakazuje tego typu modyfikacji. Jest to przydatne do przesyłania danych wrażliwych, np. w czasie logowania.

only-if-cached – klient chce dostać tylko dane znajdujące się w cache’u. Odpowiedzią może być rekord pobrany z cache lub kod 504 (Gateway Timeout), gdy cache dla tego zasobu jest pusty.

must-revalidate – oznacza, że odkąd rekord w cache stanie się nieaktualny, nie może on już być więcej użyty. Jest to użyteczne do zapewnienia wiarygodnych operacji zgodnych z ustawieniami daty ważności. Służy zwykle do wymuszenia odświeżenia rekordu niezależnie od ustawień klienta.

public – oznacza, że request nie jest wrażliwy i może być przechowywany we współdzielonym cache’u.

private – zapytanie i odpowiedź mogą być tylko przechowywane i udostępniane w obrębie tego samego użytkownika. Nie zapewnia to jednak bezpieczeństwa przechowywanych danych i nadal informacje autentykacyjne nie powinny być cache’owane.

proxy-revalidate – działa tak samo jak must-revalidate, ale tylko dla współdzielonego cache’u.

Poniżej widać przypisanie, które opcje mogą być użyte w zapytaniach, a które w odpowiedziach.

Request Response
no-cache public
no-store private
max-age no-cache
max-stale no-store
min-fresh no-transform
no-transform must-revalidate
only-if-cached proxy-revalidate
max-age
s-maxage

cache-times
Przykłady:

Cache-Control:public, max-age=31536000
Powyższy nagłówek oznacza cache ważny rok czasu od momentu pobrania

Cache-Control:public
Expires: Mon, 25 Jun 2012 21:31:12 GMT

Ten nagłówek wskazuje dokładną datę wygaśnięcia cache’owanego elementu

Expires

Wskazuje datę i godzinę, po której odpowiedź jest traktowana jako zdezaktualizowana. Wartość max-age z nagłówka Cache-Control jest ważniejsza niż Expires i nadpisuje ją.

Pragma

Nagłówek ten służy głównie do zapewnienia wstecznej kompatybilności ze standardem HTTP 1.0. Pozwala na zdefiniowanie dodatkowych właściwości dla zapytania. W naszym przypadku interesująca jest tylko wartość no-cache, która działa identycznie jak no-cache z Cache-Control.

Należy zauważyć, że w przypadku wystąpienia nagłówka Cache-Control i przetwarzania zapytania w standardzie HTTP 1.1, nagłówek Pragma jest ignorowany.

Może to prowadzić sytuacji, że definiując dwa sprzeczne nagłówki, powodujemy różne zachowanie naszego zapytania zależnie od obsługującej go wersji HTTP. Należy o tym pamiętać podczas używania Pragma.

GET / HTTP/1.1
Host: www.example.com
Cache-Control: max-age=30
Pragma: no-cache

Warning

Nagłówek ten może przekazywać dodatkowe informacje na temat transformacji, jakim podlegała wiadomość. Jest to ostrzeżenie, że wiadomość wysłana różni się od otrzymanej.

Ostrzeżenia są podobne do statusów, jednak mogą przekazywać więcej informacji i mogą występować wielokrotnie w jednej wiadomości. Na przykład:

Warning: 110 - "Response is Stale"
Warning: 113 - "Heuristic Expiration"

Źródła:
http://www.mobify.com/blog/beginners-guide-to-http-cache-headers/
https://www.mnot.net/cache_docs/
https://tools.ietf.org/html/rfc7234