dyrektywę Expires*
z „modyfikacja” jako podstawy odnosi się do czasu modyfikacji pliku na serwerze. Jeśli więc ustawisz, powiedzmy "modyfikacja plus 2 godziny", każda przeglądarka, która zażąda treści w ciągu 2 godzin po modyfikacji pliku (na serwerze), buforuje tę zawartość do 2 godzin po czasie modyfikacji pliku. Przeglądarka wie, kiedy ten czas jest, ponieważ serwer wysyła nagłówek Expires
z właściwym czasem wygaśnięcia.
Pozwól mi wyjaśnić na przykładzie: powiedzieć konfiguracja Apache zawiera linię
ExpiresDefault modification plus 2 hours
i masz plik index.html
, których dyrektywa ma zastosowanie do ExpiresDefault
na serwerze. Załóżmy, że przesyłasz wersję index.html
o 9:53 GMT, zastępując poprzednią istniejącą index.html
(jeśli taka była). Teraz czas modyfikacji index.html
wynosi 9:53 GMT. Jeżeli biegli ls -l
na serwerze (lub dir
w systemie Windows), można zobaczyć go w wykazie:
-rw-r--r-- 1 apache apache 4096 Feb 18 09:53 index.html
Teraz z każdego żądania, Apache wysyła nagłówek Last-Modified
o czas ostatniej modyfikacji pliku. Ponieważ masz tę dyrektywę ExpiresDefault
, wyśle ona również nagłówek Expires
z czasem równym czasowi modyfikacji pliku (9:53) plus dwie godziny. Więc tutaj jest częścią tego, co przeglądarka widzi:
Last-Modified: Wed, 18 Feb 2009 09:53:00 GMT
Expires: Wed, 18 Feb 2009 11:53:00 GMT
Jeśli czas, w którym przeglądarka sprawia, że ten wniosek jest przed 11:53 GMT, przeglądarka będzie buforować stronę, ponieważ jeszcze nie upłynął.Jeśli więc użytkownik najpierw odwiedza stronę o 11:00 GMT, a następnie ponownie przejdzie na tę samą stronę o godzinie 11:30 GMT, przeglądarka zobaczy, że jego wersja z pamięci podręcznej jest nadal ważna i nie będzie (lub raczej nie będzie mogła) Utwórz nowe żądanie HTTP.
Jeśli użytkownik wejdzie na stronę trzeci raz o 12:00 GMT, przeglądarka zobaczy, że jego wersja z pamięci podręcznej wygasła (jest po 11:53), więc próbuje zweryfikować stronę, wysyłając żądanie do serwer z nagłówkiem If-Modified-Since. Odpowiedź 304 (niezmodyfikowana) bez treści zostanie zwrócona, ponieważ data strony nie została zmieniona od czasu jej pierwszego wyświetlenia. Od upłynięcia daty ważności - strona jest "nieaktualna" - próba sprawdzenia poprawności będzie dokonywana przy kolejnych odwiedzinach strony do momentu niepowodzenia sprawdzania poprawności.
Teraz, zamiast tego, udawajmy, że przesłałeś nową wersję strony o 11:57. W tym przypadku próba potwierdzić starą wersję strony na 12:00 przeglądarki zawodzi i nie otrzyma odpowiedzi, wraz z nowej strony, te dwa nowe nagłówki:
Last-Modified: Wed, 18 Feb 2009 11:57:00 GMT
Expires: Wed, 18 Feb 2009 13:57:00 GMT
(Ostatni czas modyfikacji pliku staje się 11:57 po przesłaniu nowej wersji, a Apache oblicza czas wygaśnięcia jako 11:57 + 2:00 = 13:57 GMT.)
Walidacja (przy użyciu bardziej aktualnej daty) nie będzie wymagane do 13:57.
(Uwaga oczywiście, że wiele innych rzeczy są wysyłane wraz z dwoma nagłówkami I wymienione powyżej, po prostu przycięte na całą resztę dla uproszczenia)
Witaj David, to ma sens, ale nadal nie jestem pewien, dlaczego i jak serwer wie, aby wysłać przeglądarkę. Więc jeśli dobrze zrozumiem, następnym razem, gdy przeglądarka zażąda zasobu, serwer w jakiś sposób przesyła informacje do przeglądarki o stanie modyfikacji plików - ale nie jest to dostanie –
Pomyślałem, że najłatwiej byłoby to wyjaśnić na przykładzie, więc Edytowałem jeden w ... –
niesamowite dzięki za twój czas –