2011-09-27 14 views
13

Nie mogę znaleźć praktycznej różnicy między Cache-Control:no-store i Cache-Control:no-cache.Jaka jest różnica między brakiem pamięci podręcznej i brakiem magazynu w sterowaniu pamięci podręcznej?

Z tego co mi wiadomo, no-store oznacza, że ​​żadne urządzenie pamięci podręcznej nie może buforować tej odpowiedzi. Z drugiej strony, no-cache oznacza, że ​​żadne urządzenie pamięci podręcznej nie może obsługiwać buforowanej odpowiedzi bez sprawdzenia jej najpierw ze źródłem. Ale na czym polega ta walidacja? Warunkowe uzyskanie?

Co się stanie, jeśli odpowiedź ma numer no-cache, ale nie ma ona Last-Modified lub ETag?

Pozdrawiam.

Odpowiedz

12

Ale o co chodzi?

Dokładne sprawdzanie Last-Modified lub ETag. Klient zapyta serwer, czy ma nową wersję danych, używając tych nagłówków, a jeśli odpowiedź brzmi "nie", wyświetli dane z pamięci podręcznej.


Aktualizacja

Od RFC

no-cache 
    If the no-cache directive does not specify a field-name, then a cache MUST NOT use 
the response to satisfy a subsequent request without successful revalidation with the 
origin server. This allows an origin server to prevent caching even by caches that 
have been configured to return stale responses to client requests. 
+0

, a jeśli buforowana odpowiedź nie ma "Last-Modified" ani "ETag"? – vtortola

+0

Myślę, że w tym przypadku odpowiedź nie zostanie w ogóle zapisana w pamięci podręcznej. –

+0

Tak interpretuję RFC. (Dodano fragment) –

2

Jak można zidentyfikować, nie -cache nie oznacza, że ​​nigdy nie jest buforowanie, ale raczej, że agent użytkownika musi zawsze pytać serwer, czy można użyć tego, co jest w pamięci podręcznej. Natomiast sklep "no-store" nie utrzymuje nawet kopii, co oznacza, że ​​nie ma o co pytać. Jeśli znasz odpowiedź na pytanie "Czy mogę użyć tego ponownie?" zawsze jest nie, otrzymujesz zwiększenie wydajności przez (1) pomijanie narzutów z prośbą i (2) nie zrzucanie jakiegoś możliwego do ponownego wykorzystania zapisanego wyniku, aby zrobić miejsce dla nowego, nigdy nie powtórnie użytego wyniku.

Oprócz wydajności występuje różnica w zachowaniu z historią przeglądarki . Sekcja specyfikacji protokołu HTTP 1.1 13.13 mówi, że "czas wygaśnięcia nie dotyczy mechanizmów historii". Nagłówek braku pamięci podręcznej opisuje wygaśnięcie, więc nie ma zastosowania do mechanizmów historii, takich jak przycisk Wstecz. W ten sposób użytkownik może przejść wstecz do poprzedniej strony bez pamięci podręcznej bez kontaktu z serwerem.

Z drugiej strony nagłówek zakazu przechowywania danych uniemożliwia przechowywanie danych poza sesją, w takim przypadku po prostu nie jest dostępny dla mechanizmu historii. W przypadku braku sklepu, jeśli użytkownik kończy swoją sesję, przechodząc do innej domeny, a następnie wraca, jedynym sposobem, aby przeglądarka mogła się dowiedzieć, co wyświetlić, jest ponowne pobranie strony początkowej z serwera.

Oto jak Chromium issue na ten temat sprawia, że ​​rozróżnienie:

no-cache nie oznacza "nie Cache" (co byłoby nie-store). no-cache oznacza, że ​​nie używa się tego do normalnych obciążeń, chyba że zasób zostanie ponownie zatwierdzony ze względu na świeżość. Nawigacje historyczne nie są normalnymi ładunkami.

Powiązane problemy