jaka jest różnica między nagłówkami Expires a Cache-Control?

Odpowiedzi:

130

Cache-Controlzostał wprowadzony w HTTP / 1.1 i oferuje więcej opcji niż Expires. Można ich użyć do osiągnięcia tego samego, ale wartość danych dla Expiresjest datą HTTP, podczas gdy Cache-Controlmaksymalny wiek pozwala określić względny czas, dzięki czemu można określić „X godzin po zażądaniu strony”.

Kontrola bufora HTML jest bardzo podobnym pytaniem i zawiera dobry link do samouczka buforowania, który powinien odpowiedzieć na większość twoich pytań (np. Http://www.mnot.net/cache_docs/#EXPIRES ). Podsumowując, Expireszalecane jest w przypadku zasobów statycznych, takich jak obrazy, i Cache-Controlgdy potrzebujesz większej kontroli nad sposobem buforowania.

Lee
źródło
8
Warto skomentować, że wszystkie przeglądarki będą używać kontroli pamięci podręcznej, ale przydatne jest określenie obu nagłówków na wypadek, gdyby na drodze były stare serwery proxy.
Nacho Coloma,
3
Skorzystaj z serwisu redbot.org (również Mark Nottingham , który napisał artykuł o buforowaniu wymieniony w odpowiedzi powyżej), aby sprawdzić poprawność użycia nagłówków buforowania.
daxim
35
Ponadto: „Gdy obecne są zarówno kontrola pamięci podręcznej, jak i wygasa, kontrola pamięci podręcznej ma pierwszeństwo.” - mnot.net/cache_docs/
KFunk
35

Jeśli korzystasz z sieci CDN (Cloud Delivery Network), zalecam użycie Cache-Control z maksymalnym czasem trwania w sekundach. Na przykład Kontrola pamięci podręcznej: maks. Wiek = 604800. Zapobiega to szczytom żądań do twojego serwera źródłowego: „Wygaśnięcie śr., 30 października 20xx 04:37:07 GMT” wszystkie przeglądarki będą Cię o to pytać jednocześnie.

użytkownik3241258
źródło
22
Apache (i prawdopodobnie wiele serwerów) zwykle ustawia datę wygaśnięcia, używając godziny, o którą plik został zażądany + określony limit czasu. Ponieważ ta data używa sekund, scenariusz jest bardzo mało prawdopodobny, a zachowanie jest takie samo jak cache-control. Więc nie rozumiem, dlaczego byłyby szczytowe żądania przy użyciuExpires:
wilno
19

Zgodnie z tym artykułem Google Developers buforowanie HTTP :

Nagłówek kontroli pamięci podręcznej został zdefiniowany jako część specyfikacji HTTP / 1.1 i zastępuje poprzednie nagłówki (np. Wygasa) używane do definiowania zasad buforowania odpowiedzi. Wszystkie nowoczesne przeglądarki obsługują Cache-Control, dlatego to wszystko, czego potrzebujemy.

Paweł
źródło
Nie tylko wszystkie nowoczesne przeglądarki obsługują tę funkcję - powinny również, tak jak jest to w specyfikacji: „Jeśli odpowiedź zawiera zarówno nagłówek Expires, jak i dyrektywę o maksymalnym wieku, dyrektywa o maksymalnym wieku zastępuje nagłówek Expires, nawet jeśli wygasa nagłówek jest bardziej restrykcyjny ”[ w3.org/Protocols/rfc2616/rfc2616-sec14.html]
rosell.dk
8

Kontrola pamięci podręcznej została zdefiniowana w HTTP / 1.1, informuje wszystkie mechanizmy buforowania od serwera do klienta, czy mogą buforować ten obiekt. Mierzy się ją w sekundach: Cache-Control: max-age=3600.

Pole Expiresnagłówka podaje datę / godzinę, po której odpowiedź jest uważana za nieaktualną. Expires wartość jest HTTP data timestamp: Expires: Tue, 18 Jul 2017 16:07:23 GMT.

Jeśli odpowiedź zawiera Cache-Controlpole z max-agedyrektywą, odbiorca MUSI zignorować to Expirespole.

nodejh
źródło
4

Heroku devcenter ma doskonały artykuł na ten temat.

Cytując z tego

Podczas gdy nagłówek Cache-Control włącza buforowanie po stronie klienta i ustawia maksymalny wiek zasobu, nagłówek Expires służy do określania określonego momentu, w którym zasób nie jest już ważny.

Devi
źródło
0

Z wyjątkiem prywatnych / publicznych opcji CC, nie widzę żadnej różnicy. Gdy używasz wygasania, np. „Dostęp plus 1 rok / miesiąc / tydzień / dzień”, działa dokładnie tak samo jak CC.

Obrabować
źródło
Czy zechciałbyś wyjaśnić opinię? Przeprowadziłem rozległe testy w Chrome, Safari i Firefox. Kontrola pamięci podręcznej ma pewne opcje, które nie są dostępne po wygaśnięciu, ale dla wszystkich praktycznych celów oba działają dokładnie w ten sam sposób.
Rob
-1

Jeśli nadal jesteś zainteresowany, pozostawiam to zalecenie bezpośrednio od chłopców z Google. https://developers.google.com/speed/docs/insights/LeverageBrowserCaching Wolą wygasać przed Cache-Control

promień
źródło
Czy na pewno wolą wygasać niż Kontrola pamięci podręcznej? Przeczytałem, że zastąpienie jest odwrotne, przynajmniej w przypadku Firefoksa. developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expires
Ecker00
Obecnie na stronie wspomniano o „Przestarzałe. Ta strona została napisana dla wersji 4 interfejsu API PageSpeed ​​Insights, który jest przestarzały i zostanie zamknięty w maju 2019 r. Wersja 5 jest najnowsza i zawiera zarówno rzeczywiste dane z Chrome User Experience Raport i dane laboratoryjne z latarni morskiej ”.
Jochem Schulenklopper