Powiedziano mi, żebym zapobiegał wyciekowi informacji o użytkowniku, tylko odpowiedź „no-cache” nie wystarczy. „brak sklepu” jest również konieczne.
Cache-Control: no-cache, no-store
Po przeczytaniu tej specyfikacji http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html , nadal nie jestem pewien, dlaczego.
Obecnie rozumiem, że jest to tylko dla pośredniego serwera pamięci podręcznej. Nawet jeśli w odpowiedzi pojawi się komunikat „no-cache”, pośredni serwer pamięci podręcznej może nadal zapisywać zawartość w pamięci nieulotnej. Pośredni serwer pamięci podręcznej zdecyduje, czy użyć zapisanej treści dla następnego żądania. Jeśli jednak odpowiedź zawiera informację „no-store”, pośredni serwer pamięci podręcznej nie powinien przechowywać treści. Więc to jest bezpieczniejsze.
Czy jest jakiś inny powód, dla którego potrzebujemy zarówno opcji „no-cache”, jak i „no-store”?
no-cache
nie oznacza tego, co myślisz, że to robi. Właściwie oznacza to „proszę ponownie zweryfikować”.Odpowiedzi:
Muszę wyjaśnić, że
no-cache
nie oznacza to, że nie buforuj . W rzeczywistości oznacza to „ponowne sprawdzenie poprawności z serwerem” przed użyciem jakiejkolwiek odpowiedzi z pamięci podręcznej, którą możesz mieć, na każde żądanie.must-revalidate
z drugiej strony wymaga ponownej walidacji tylko wtedy, gdy zasób zostanie uznany za nieaktualny.Jeśli serwer twierdzi, że zasób jest nadal ważny, pamięć podręczna może odpowiedzieć swoją reprezentacją, zmniejszając w ten sposób potrzebę ponownego wysłania przez serwer całego zasobu.
no-store
jest w rzeczywistości pełną dyrektywą „ nie zapisuj w pamięci podręcznej” i ma na celu zapobieganie przechowywaniu reprezentacji w jakiejkolwiek formie pamięci podręcznej.Powiem cokolwiek, ale zwróć uwagę na to w specyfikacji HTTP RFC 2616:
Jest to jednak pomijane w nowszej specyfikacji protokołu HTTP RFC 7234 w celu potencjalnej próby
no-store
wzmocnienia, zobacz:http://tools.ietf.org/html/rfc7234#section-5.2.1.5
źródło
Cache-Control: no-store
wystarczy?no-store
i nie opisuje,no-cache
jakby w ogóle nie buforował ... Jestem zdezorientowany!W pewnych okolicznościach IE6 będzie nadal buforować pliki, nawet jeśli
Cache-Control: no-cache
znajduje się w nagłówkach odpowiedzi.Stany W3C
no-cache
:W mojej aplikacji, jeśli odwiedziłeś stronę z
no-cache
nagłówkiem, wylogowałeś się, a następnie wcisnąłeś z powrotem w przeglądarce, IE6 nadal pobierałby stronę z pamięci podręcznej (bez nowego / sprawdzającego żądania do serwera). Dodanie wno-store
nagłówku zatrzymało to. Ale jeśli uwierzysz W3C na słowo, tak naprawdę nie ma sposobu, aby kontrolować to zachowanie:Ogólne różnice między historią przeglądarki a zwykłym buforowaniem HTTP są opisane w odpowiedniej podsekcji specyfikacji .
źródło
no-store
. W przeciwnym razie Chrome pokaże dane z pamięci podręcznej / buforowane, gdy użyjesz przycisku Wstecz.no-cache
nagłówek. Cytat z W3C bezpośrednio poniżej jasno pokazuje, że tak nie jest;no-cache
nagłówek oznacza raczej, że odpowiedź musi zostać ponownie zweryfikowana przed ponownym użyciem do obsługi kolejnych żądań.Ze specyfikacji HTTP 1.1 :
źródło
no-cache
imax-age=0
powiedz, że przedmiot ma być uważany za nieaktualny. Oznacza to, że przed przekazaniem należy go ponownie zweryfikować. Oznacza to, że pamięć podręczna może przechowywać plik, a następnie wykonać warunkowe żądanie, na które serwer mógłby odpowiedzieć304 NOT MODIFIED
. Jest to oczywiście ogromna zaleta, ponieważ treść odpowiedzi nie musi być generowana ani wysyłana. Tak więc, aby skorzystać z tej wielu (większości?) Pamięci podręcznych, będą przechowywaneno-cache
odpowiedzi.Jeśli chcesz zapobiec wszelkiemu buforowaniu (np. Wymusić przeładowanie podczas korzystania z przycisku Wstecz), potrzebujesz:
no-cache dla IE
no-store dla przeglądarki Firefox
Moje informacje na ten temat są tutaj:
http://blog.httpwatch.com/2008/10/15/two-important-differences-between-firefox-and-ie-caching/
źródło
no-store
nie powinno być konieczne w normalnych sytuacjach i może zaszkodzić zarówno szybkości, jak i użyteczności. Jest przeznaczony do użytku w przypadku, gdy odpowiedź HTTP zawiera informacje tak wrażliwe, że w ogóle nie powinna być zapisywana w pamięci podręcznej dysku, niezależnie od negatywnych skutków, jakie stwarza to dla użytkownika.Jak to działa:
Zwykle, nawet jeśli agent użytkownika, taki jak przeglądarka, ustali, że odpowiedź nie powinna być buforowana, może nadal przechowywać ją w pamięci podręcznej dysku z powodów wewnętrznych dla agenta użytkownika. Ta wersja może być wykorzystywana do takich funkcji, jak „wyświetl źródło”, „wstecz”, „informacje o stronie” itd., Gdzie użytkownik nie musi koniecznie ponownie zażądać strony, ale przeglądarka nie uważa tego za nowy widok strony i miałoby sens serwowanie tej samej wersji, którą aktualnie przegląda użytkownik.
Użycie
no-store
uniemożliwi przechowywanie tej odpowiedzi, ale może to wpłynąć na możliwość podania przez przeglądarkę „źródła wyświetlania”, „wstecz”, „informacji o stronie” itd. Bez wysyłania nowego, oddzielnego żądania do serwera, co jest niepożądane. Innymi słowy, użytkownik może spróbować wyświetlić źródło, a jeśli przeglądarka nie zachowała go w pamięci, albo zostanie poinformowany, że nie jest to możliwe, albo spowoduje to nowe żądanie do serwera. Dlategono-store
powinno być używane tylko wtedy, gdy utrudniane przez użytkownika korzystanie z tych funkcji nie działa prawidłowo lub szybko jest równoważone przez znaczenie zapewnienia, że zawartość nie jest przechowywana w pamięci podręcznej.To jest niepoprawne. Serwery pośredniczące z pamięcią podręczną zgodne z protokołem HTTP 1.1 będą przestrzegać instrukcji
no-cache
imust-revalidate
, zapewniając, że zawartość nie jest buforowana. Skorzystanie z tych instrukcji zapewni, że odpowiedź nie będzie buforowana przez żadną pośrednią pamięć podręczną, a wszystkie kolejne żądania będą wysyłane z powrotem do serwera pochodzenia.Jeśli pośredni serwer pamięci podręcznej nie obsługuje protokołu HTTP 1.1, będziesz musiał użyć
Pragma: no-cache
i mieć nadzieję na najlepsze. Zauważ, że jeśli nie obsługuje HTTP 1.1,no-store
to i tak nie ma znaczenia.źródło
no-cache
zachowuje sztywną świeżość bez poświęcania wszystkich zalet buforowania, co oznacza, że pamięć podręczna jest przechowywana i używana ponownie, jeśli serwer odpowie komunikatem 304 Not Modified.Jeśli system buforowania poprawnie implementuje brak przechowywania, nie potrzebujesz żadnej pamięci podręcznej. Ale nie wszyscy. Ponadto niektóre przeglądarki implementują brak pamięci podręcznej, tak jakby to był brak przechowywania. Tak więc, chociaż nie jest to ściśle wymagane, prawdopodobnie najbezpieczniej jest uwzględnić oba.
źródło
Zwróć uwagę, że Internet Explorer od wersji 5 do 8 zgłosi błąd podczas próby pobrania pliku obsługiwanego przez https i serwer wysyłający
Cache-Control: no-cache
lubPragma: no-cache
nagłówki.Zobacz http://support.microsoft.com/kb/812935/en-us
Użycie
Cache-Control: no-store
iPragma: private
wydaje się być najbliższą rzeczą, która nadal działa.źródło
Cache-Control: no-store, no-cache, must-revalidate
dokładną kolejność, aby to zadziałało. Jednak to nie zadziałało w naszym scenariuszu, ale to, co zasugerował @bassim powyżej, zadziałało. Dzięki!W przypadku Chrome, no-cache jest używany do ponownego załadowania strony przy ponownej wizycie, ale nadal buforuje ją, jeśli wrócisz do historii (przycisk Wstecz). Aby ponownie załadować stronę w celu przywrócenia historii, użyj opcji no-store. IE wymaga ponownej walidacji, aby działać w każdej sytuacji.
Więc tylko po to, aby uniknąć wszystkich błędów i błędnych interpretacji, których zawsze używam
jeśli chcę się upewnić, że się ponownie załaduje.
źródło
Pierwotnie korzystaliśmy z no-cache wiele lat temu i napotkaliśmy pewne problemy z nieaktualnymi treściami w niektórych przeglądarkach ... Nie pamiętam niestety szczegółów.
Od tego czasu zdecydowaliśmy się TYLKO na korzystanie z braku sklepu. Od tamtej pory nigdy nie oglądałem się za siebie ani nie miałem ani jednego problemu z nieaktualnymi treściami w jakiejkolwiek przeglądarce lub u pośredników.
Ta przestrzeń jest z pewnością zdominowana przez rzeczywistość implementacji w porównaniu z tym, co zostało napisane w różnych dokumentach RFC. W szczególności wiele serwerów proxy ma tendencję do myślenia, że lepiej „poprawiają wydajność”, zastępując politykę, której powinni przestrzegać, własną.
źródło
no-store
.Żeby było jeszcze gorzej, w niektórych sytuacjach nie można użyć no-cache, ale no-store może:
http://faindu.wordpress.com/2008/04/18/ie7-ssl-xml-flex-error-2032-stream-error/
źródło
OWASP omawia to:
Źródło tutaj .
źródło
no-cache
mówi, że nie możesz go używać bez weryfikacji z serwerem. Jeśli kopia z pamięci podręcznej jest nadal dobra, serwer odpowie numerem 304, a następnie użyjesz kopii z pamięci podręcznej. Oszczędza potencjalnie duże pobieranie sieciowe.no-store
z drugiej strony mówi, że nie możesz w ogóle buforować danych.