cache-control
Nagłówek jest podstawowym mechanizmem serwera HTTP, aby powiedzieć proxy buforowanie „świeżość” z odpowiedzią. (tj. jak / jeśli długo przechowywać odpowiedź w pamięci podręcznej)
W niektórych sytuacjach cache-control
dyrektywy są niewystarczające. Tutaj zarchiwizowana jest dyskusja grupy roboczej HTTP , opisująca stronę, która zmienia się tylko wraz z językiem. To nie jest poprawny przypadek użycia dla nagłówka zmiennej, ale kontekst jest cenny dla naszej dyskusji. (Chociaż uważam, że nagłówek Vary rozwiązałby problem w tym przypadku, istnieje lepszy sposób.) Z tej strony:
Vary
jest przeznaczony wyłącznie do tych przypadków, w których replikacja tego, co zrobiłby serwer, jest beznadziejna lub nadmiernie skomplikowana.
Wymyślony przykład:
Twój serwer HTTP ma dużą stronę docelową. Masz dwie nieco różne strony z tym samym adresem URL, w zależności od tego, czy użytkownik był tam wcześniej. Rozróżniasz żądania i „liczbę odwiedzin” użytkownika na podstawie plików cookie. Ale - ponieważ strona docelowa twojego serwera jest tak duża, chcesz, aby pośredniczące proxy buforowały odpowiedź, jeśli to możliwe.
Adres URL, nagłówki Last-Modified i Cache-Control są niewystarczające, aby dać ten wgląd do buforującego serwera proxy, ale jeśli to dodasz Vary: Cookie
, silnik pamięci podręcznej doda nagłówek Cookie do swoich decyzji dotyczących buforowania.
Wreszcie, dla małego ruchu, dynamicznych witryn internetowych - zawsze uważałem, że jest to proste Cache-Control: no-cache, no-store
i Pragma: no-cache
wystarczające.
Edytuj - aby dokładniej odpowiedzieć na Twoje pytanie: nagłówek żądania HTTP „Akceptuj” określa typy treści, które klient może przetwarzać. Jeśli masz dwie kopie tej samej treści pod tym samym adresem URL, różniące się tylko typem treści, użycie Vary: Accept
może być właściwe.
Aktualizacja 11, 12 września:
Dołączam kilka linków, które pojawiły się w komentarzach od czasu opublikowania tego komentarza. Obydwa są doskonałym źródłem przykładów (i problemów) z życia wziętych z Vary: Accept; Jeśli czytasz tę odpowiedź, musisz przeczytać również te linki.
Pierwsza, od znakomitego EricLaw, dotycząca zachowania Internet Explorera z nagłówkiem Vary i niektórych wyzwań, jakie stawia programistom: Vary Header zapobiega buforowaniu w IE . Krótko mówiąc, przeglądarka IE (wcześniejsza niż IE9) nie buforuje żadnej treści używającej nagłówka Vary, ponieważ pamięć podręczna żądań nie zawiera nagłówków żądań HTTP. EricLaw (Eric Lawrence w świecie rzeczywistym) jest kierownikiem programu w zespole IE.
Drugi pochodzi od Erana Medana i jest toczącą się dyskusją na temat nieoczekiwanego zachowania Chrome związanego z Vary: tworzenie kopii zapasowych nie obsługuje poprawnie nagłówka Vary . Jest to związane z zachowaniem IE, z wyjątkiem tego, że twórcy Chrome przyjęli inne podejście - choć nie wydaje się, aby był to celowy wybór.