2014-11-20 57 views
5

Wiem, że to pytanie jest zadawane wiele razy. Ale nadal nie mam jasności co do tej koncepcji. Po przeczytaniu wielu blogów i odpowiedzi w SO co mam to,Jaka jest różnica między nagłówkiem Etag i Expires?

Expiry headers are used when you don’t even want client (and proxies/caches) to make a request to 
the server. In ETAG, the client will check with the server for the update, but in expiry 
headers, the client will know, when to expire the file and check for an update, till then it 
(browsers and proxies/caches) won’t bother server for checking the update. 

Więc w zasadzie to powiedzieć, jeśli używamy wygasa nagłówek/max-age, nie będzie nawet sprawdzić na serwerze dla zaktualizowanego pliku. Pomyślałem, że przetestuję to lokalnie.

Stworzyłem więc prosty plik HTML zawierający 2 pliki js i 1 plik obrazu. W IIS ustawiłem nagłówek Expires na 2 dni dla folderu obrazu. Tak jak na moje rozumowanie, po otrzymaniu pliku obrazu z serwera raz, dla następnego żądania nie powinien wysyłać żądania do serwera, aby sprawdzić, czy plik obrazu jest zmodyfikowany, czy nie.

Ale za każdym razem, gdy odświeżam stronę, widzę żądanie wysłane na serwer, a serwer zwraca status 304 not modified. Ale zgodnie ze specyfikacjami/blogami, które przeczytałem, nie powinien wysyłać żądania do serwera.

Ktoś proszę wyjaśnić.

enter image description here

Odpowiedz

3

Za to, co opisali

  • Jest oczywiste, że ETag działa tak jak oczekiwano, odpowiadając z 304 not modified na życzenie z If-None-Match pola i ETag wartości.

    , więc teraz przeglądarka załaduje obraz z pamięci podręcznej, zamiast pobierania nowego obrazu z serwera kosztującego przepustowość i czas.

  • Wydaje się, że buforowanie jest wyłączone w Twojej przeglądarce Płyty te właśnie nowe żądanie zostało wysłane przed upływem cache lub inny wniosek nie zostałby wysłany na pierwszym miejscu.

    Oto wspaniały article, który wyjaśnia, jak znaleźć buforowanie jest wyłączona w przeglądarce programowo

    Oto kolejny wspaniały article który wyjaśnia buforowanie i ETAG w głębi.

Uwaga:

Generalnie Jeśli używasz wielu serwerów z obciążenia równoważenia na zlecenie organizacji witryny następnie proste konfiguracje ETAG będzie kosztować większą przepustowość poprzez Etag w nagłówku i nie ma sensu sprawdzanie, czy pamięć podręczna przeglądarki jest poprawna. (Zawsze będzie to nieważne)

0

Ważną częścią jest to, co powiedziałeś: Odświeżam stronę. W tym przypadku przeglądarka próbuje dostarczyć Ci świeżej zawartości, więc nie ma innej opcji niż kontakt z serwerem i sprawdzenie wszystkich zasobów. (Istnieje rozszerzenie kontroli pamięci podręcznej immutable, które zapobiega temu zjawisku, ale nie jest powszechnie stosowane i implementowane).

Jeśli chcesz zobaczyć zachowanie przeglądarki, które respektuje pamięci podręczne bez przeładowania, musisz użyć "standardowego wpisu strony". Kliknij link do strony lub użyj innej karty i wpisz URL strony na pasku adresu i naciśnij enter.

Pamięć podręczna respektuje czas wygaśnięcia, więc jeśli dokument nie jest nieaktualny, to jest zwracany z pamięci podręcznej. Jeśli wygasło, że ETag jest używany do sprawdzania poprawności zasobu (i po sprawdzeniu poprawności możliwe jest, że zasób nadal nie jest modyfikowany - odpowiedź 304)