HTTP
Buforowanie odpowiedzi HTTP
Szukaj…
Uwagi
Odpowiedzi są buforowane osobno dla każdego adresu URL i każdej metody HTTP.
Buforowanie HTTP jest zdefiniowane w RFC 7234 .
Słownik
- fresh - stan buforowanej odpowiedzi, która jeszcze nie wygasła. Zwykle nowa odpowiedź może zaspokoić żądania bez potrzeby kontaktowania się z serwerem, z którego pochodzi odpowiedź.
- przestarzały - stan buforowanej odpowiedzi, która przekroczyła datę ważności. Zwykle nieaktualne odpowiedzi nie mogą być użyte do zaspokojenia żądania bez sprawdzenia na serwerze, czy jest ono nadal prawidłowe.
- spełniają - buforowana odpowiedź spełnia żądanie, gdy wszystkie warunki w żądaniu są zgodne z buforowaną odpowiedzią, np. mają tę samą metodę HTTP i adres URL, odpowiedź jest świeża lub żądanie umożliwia nieaktualne odpowiedzi, nagłówki żądania pasują do nagłówków wymienionych w nagłówku
Vary
odpowiedzi itp. . - revalidation - sprawdzanie, czy buforowana odpowiedź jest świeża. Zwykle odbywa się to za pomocą żądania warunkowego zawierającego
If-Modified-Since
lubIf-None-Match
i status odpowiedzi304
. - prywatna pamięć podręczna - pamięć podręczna dla jednego użytkownika, np. w przeglądarce internetowej. Prywatne skrzynki mogą przechowywać spersonalizowane odpowiedzi.
- public cache - pamięć podręczna współdzielona przez wielu użytkowników, np. na serwerze proxy. Taki bufor może wysłać tę samą odpowiedź do wielu użytkowników.
Odpowiedź pamięci podręcznej dla wszystkich przez 1 rok
Cache-Control: public, max-age=31536000
public
oznacza, że odpowiedź jest taka sama dla wszystkich użytkowników (nie zawiera żadnych spersonalizowanych informacji). max-age
za kilka sekund. 31536000 = 60 * 60 * 24 * 365.
Jest to zalecane w przypadku zasobów statycznych, których nigdy nie należy zmieniać.
Buforuj spersonalizowaną odpowiedź przez 1 minutę
Cache-Control: private, max-age=60
private
określa, że odpowiedź może być buforowana tylko dla użytkownika, który zażądał zasobu, i nie może być ponownie użyta, gdy inni użytkownicy zażądają tego samego zasobu. Jest to odpowiednie w przypadku odpowiedzi zależnych od plików cookie.
Przestań używać buforowanych zasobów bez uprzedniego sprawdzenia na serwerze
Cache-Control: no-cache
Klient zachowa się tak, jakby odpowiedź nie była buforowana. Jest to odpowiednie w przypadku zasobów, które mogą w nieprzewidziany sposób zmienić się w dowolnym momencie i które użytkownicy muszą zawsze widzieć w najnowszej wersji.
Odpowiedzi no-cache
będą wolniejsze (duże opóźnienia) ze względu na konieczność kontaktowania się z serwerem za każdym razem, gdy są używane.
Jednak w celu zaoszczędzenia przepustowości klienci mogą nadal przechowywać takie odpowiedzi. Odpowiedzi no-cache
nie będą wykorzystywane do zaspokajania żądań bez kontaktu z serwerem za każdym razem, aby sprawdzić, czy buforowaną odpowiedź można ponownie wykorzystać.
Żądaj, aby odpowiedzi nie były w ogóle przechowywane
Cache-control: no-store
Instruuje klientów, aby nie buforowali odpowiedzi w żaden sposób i nie zapominali o niej jak najszybciej.
Ta dyrektywa została pierwotnie zaprojektowana z myślą o wrażliwych danych (dziś zamiast tego należy użyć HTTPS), ale można jej użyć, aby uniknąć zanieczyszczania pamięci podręcznej odpowiedziami, których nie można ponownie wykorzystać.
Jest odpowiedni tylko w szczególnych przypadkach, w których dane odpowiedzi są zawsze różne, np. Punkt końcowy interfejsu API, który zwraca dużą liczbę losową. W przeciwnym razie można zastosować no-cache
i ponowną walidację w celu zachowania odpowiedzi „nieuleczalnej”, przy jednoczesnym zachowaniu pewnej przepustowości.
Przestarzałe, nadmiarowe i niestandardowe nagłówki
Expires
- określa datę, w której zasób staje się przestarzały. Polega na tym, że serwery i klienci mają prawidłowe zegary i poprawnie obsługują strefy czasowe.Cache-control: max-age
ma pierwszeństwo przedExpires
i jest ogólnie bardziej niezawodny.dyrektywy
post-check
i popre-check
są niestandardowymi rozszerzeniami programu Internet Explorer, które umożliwiają stosowanie nieaktualnych odpowiedzi. Standardową alternatywą jeststale-while-revalidate
.Pragma: no-cache
- przestarzały w 1999 roku . Zamiast tego należy użyćCache-control
.
Zmiana buforowanych zasobów
Najprostszym sposobem na ominięcie pamięci podręcznej jest zmiana adresu URL. Jest to stosowane jako najlepsza praktyka, gdy adres URL zawiera wersję lub sumę kontrolną zasobu, np
http://example.com/image.png?version=1
http://example.com/image.png?version=2
Te dwa adresy URL będą buforowane osobno, więc nawet jeśli …?version=1
była buforowana na zawsze , nową kopię można natychmiast pobrać jako …?version=2
.
Nie używaj losowych adresów URL do omijania pamięci podręcznej. Zamiast tego użyj Cache-control: no-cache
lub Cache-control: no-store
. Jeśli odpowiedzi z losowymi adresami URL zostaną wysłane bez dyrektywy no-store
, zostaną niepotrzebnie zapisane w pamięci podręcznej i wypchną bardziej przydatne odpowiedzi z pamięci podręcznej, co obniży wydajność całej pamięci podręcznej.