Używam PHP do generowania dynamicznych stron internetowych. Jak stwierdzono w poniższym samouczku (patrz łącze poniżej), typ MIME dokumentów XHTML powinien mieć wartość „application / xhtml + xml”, jeśli zezwala na to $ _SERVER ['HTTP_ACCEPT']. Ponieważ możesz obsługiwać tę samą stronę z 2 różnymi MIME („application / xhtml + xml” i „text / html”), ustaw nagłówek HTTP „Vary” na „Accept”. Pomoże to w buforowaniu serwerów proxy.
Link: http://keystonewebsites.com/articles/mime_type.php
Teraz nie jestem pewien implikacji: nagłówek („Vary: Accept”); Nie jestem pewien, co dokładnie zrobi „Vary: Accept” ...
Jedyne wyjaśnienie, które znalazłem, to:
Po nagłówku Content-Type do (jeśli dobrze rozumiem) wysyłany jest nagłówek Vary, który informuje pośredniczące pamięci podręczne, takie jak serwery proxy, że typ zawartości dokumentu różni się w zależności od możliwości klienta, który żąda dokumentu. http://www.456bereastreet.com/archive/200408/content_negotiation/
Każdy może dać mi „prawdziwe” wyjaśnienie tego nagłówka ( z tą wartością ). Myślę, że rozumiem takie rzeczy, jak: Vary: Accept-Encoding, gdzie pamięć podręczna na serwerach proxy może być oparta na kodowaniu wyświetlanej strony, ale nie rozumiem: Vary: Accept
Vary:
nagłówka.Odpowiedzi:
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: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
iPragma: 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.
źródło
Vary: Accept
po prostu mówi, że odpowiedź została wygenerowana na podstawieAccept
nagłówka w żądaniu. Żądanie z innymAccept
nagłówkiem może otrzymać inną odpowiedź.(Widać, że patrzy na linkowany kod PHP
$HTTP_ACCEPT
. To jest wartośćAccept
nagłówka żądania).W przypadku pamięci podręcznych HTTP oznacza to, że odpowiedź musi być zapisana w pamięci podręcznej ze szczególną ostrożnością. Będzie to poprawne dopasowanie tylko dla późniejszych żądań z dokładnie tym samym
Accept
nagłówkiem .Teraz ma to znaczenie tylko wtedy, gdy strona jest w pierwszej kolejności buforowana. Domyślnie strony PHP nie są. Strona PHP może oznaczyć wyjście jako buforowalne, wysyłając określone nagłówki (
Expires
na przykład). Ale czy i jak to zrobić, to inna kwestia.źródło
Vary: Accept
nie oznacza, że każda możliwa odrębnaAccept
wartość nagłówka daje inną i niepowtarzalną odpowiedź. Oznacza to tylko, że innyAccept
nagłówek może dać inną odpowiedź.Ten film wideo google dla webmasterów zawiera bardzo dobre wyjaśnienie
Vary
nagłówka HTTP .źródło
W rzeczywistości wkrótce (i już w Chrome) pojawi się znaczna liczba nowych funkcji, które sprawiają, że
Vary
nagłówek jest niezwykle przydatny. Na przykład rozważ podpowiedź dla klienta . Na przykład, używane w połączeniu z obrazami, podpowiedzi dla klienta umożliwiają serwerowi optymalizację zasobów, takich jak obrazy, w zależności od:Więc serwer obsługujący te funkcje ustawiłby
Vary
nagłówek, aby to wskazać.Chrome reklamuje obsługę WebP, ustawiając „image / webp” jako część
Vary
nagłówka każdego żądania. Serwer może więc przepisać obraz na WebP, jeśli przeglądarka go obsługuje, więc serwer proxy musiałby sprawdzić nagłówek, aby nie buforować obrazu WebP, a następnie przesłać go do przeglądarki, która nie obsługuje protokołu WebP. Oczywiście, jeśli Twój serwer tego nie zrobi, nie będzie to miało znaczenia. Ponieważ odpowiedź serwera różni się wAccept
nagłówku żądania, odpowiedź musi zawierać to, aby nie mylić serwerów proxy:Innym przykładem może być szerokość obrazu. W przeglądarce mobilnej
Width
nagłówek może być dość mały dla obrazu responsywnego, w porównaniu z tym, co byłby wyświetlany w przeglądarce na komputerze. Więc w takim przypadkuWidth
zostanie dodany doVary
nagłówka jest niezbędny, aby proxy nie buforowało małej wersji mobilnej i nie wyświetlało jej w przeglądarkach stacjonarnych lub odwrotnie. W takim przypadku nagłówek może zawierać:Lub w przypadku, gdy serwer obsługuje wszystkie specyfikacje podpowiedzi klienta, nagłówek będzie wyglądał mniej więcej tak:
źródło