2011-08-30 23 views
9

Przeglądarka: Firefox 6.0Jak zapobiec wyświetlaniu zawartości z pamięci podręcznej Wstecz do przodu w przeglądarce Firefox?

Mam stronę A z poniższej konfiguracji, aby upewnić się, że zawartość nie jest przechowywana w bfcache przeglądarki:

1) $(window).unload(function(){});

2) W następstwie nagłówki HTTP:

<meta http-equiv="pragma" content="no-cache" /> 
<meta http-equiv="expires" content="-1" /> 
<meta http-equiv="cache-control" content="no-cache"/> 

ja również podłączyć wydarzenia pagehide i pageshow. Kiedy ja przechodząc od strony pagehide jest wywoływana z poprawną wartość dla właściwości zdarzeń persisted = false (czyli to, co potrzebne: brak wytrwałości w pamięci podręcznej)

Po przechodząc kilka stron, Mam window.history.go(-2); iść wróć do strony A. W tym momencie chcę, aby Firefox ankietował serwer dla zaktualizowanej wersji zamiast wyświetlać z pamięci podręcznej. Numer pageshow strony A jest wywoływany z wartością PRAWDA dla właściwości zdarzenia persisted = false (co oznacza, że ​​strona NIE jest załadowana z pamięci podręcznej). ALE treść strony nie jest danymi serwera; jest to nieaktualna treść (tak samo, jak podczas początkowej nawigacji od strony)! Fiddler również nie wyświetla nowego żądania do serwera.

Google Chrome również wykazuje takie samo działanie. IE działa zgodnie z oczekiwaniami (ładuje nowe dane)!

Każdy pomysł, czego mi brakuje?

Z góry dziękuję!

Odpowiedz

9

W grę wchodzi wiele pamięci podręcznych. Jest pamięć podręczna przeglądarki (bfache), pamięć podręczna HTTP przeglądarki i ewentualnie pośrednie pamięci podręczne HTTP.

Wyświetlane powyżej znaczniki <meta> nie mają żadnego wpływu na bieżącą przeglądarkę Chrome lub Firefox. Mogą mieć wpływ na IE.

Sądzę, że twoja strona jest właśnie odczytywana z pamięci podręcznej HTTP przeglądarki.

Jeśli naprawdę chcesz wysyłać nagłówki HTTP bez bufora, powinieneś to zrobić. Ale muszą to być rzeczywiste nagłówki HTTP: jak już wspomniałem, znaczniki "równoważne" <meta> nic nie robią.

Co ważne, wszystkie inne pośrednie pamięci podręczne nie będą analizować kodu HTML, więc mogą buforować zawartość, jeśli faktycznie nie wyślesz właściwych nagłówków HTTP.

+6

Dzięki! Następujące nagłówki HTTP były już dostępne: 'Kontrola pamięci podręcznej: brak pamięci podręcznej Pragma: brak pamięci podręcznej Wygasa: -1' Niestety nie pomogły. Po odpowiedź, ja revisited nagłówki i okazało się, że Firefox potrzebuje kolejnego nagłówka, aby zapobiec buforowania: http://blog.httpwatch.com/2008/10/15/two-important-differences-between-firefox-and-ie-caching/ 'cache-Control: no-cache, no-store' Po dodaniu powyższy nagłówek, to teraz działa OK w IE, Firefox, Chrome i Safari. Jedynie Opera zachowuje się nieprawidłowo przez buforowanie, ale mam zamiar tymczasowo odroczyć ten problem. – Venkat

+0

Inna uwaga: Firefox nie przechowywać w bfcache jeśli witryna jest włączona SSL! Mój system produkcyjny to SSL, a system DEV - nie. Tak więc system produkcyjny działa poprawnie w Firefoksie BEZ dodatkowych nagłówków HTTP, jak wspomniany wyżej! – Venkat

+0

Zależy to od nagłówków HTTP. SSL + no-cache nie zostanie zapisany w bfcache, ale będzie to cacheable SSL. –

2

Poniższa odpowiedź nie działa:

Od answer on SO, dodając unload zdarzenia do okna powoduje powrót/cache do przodu, aby być wyczyszczone.

AKTUALIZACJA. MOŻLIWE ROZWIĄZANIE:

BFCache może przynieść niespodzianki programistom, ponieważ przynajmniej w Firefoksie podczas przesuwania w tył/przód strona nie odświeża się, nawet jeśli została przekazana przez nagłówki HTTP. Więc lepiej jest założyć, że strona nie odświeży.

Z drugiej strony, jaka jest różnica między uzyskanie stronę z nieaktualnych danych z powodu BFCache, a znalezienie zakładki w przeglądarce, aby nie przeładować na wieki?

Jeśli dbasz o tych rodzaju rzeczy, napisać skrypt, który sprawdza serwer aktualizacji i przeładowuje poufnych informacji. Jest to szansa, aby zmienić swój problem w zwycięstwo).

+0

Pamięć podręczna wstecz/do przodu === bfcache – Dan

+1

Nie mogę unieważnić bfcache przez dodanie zdarzenia 'unload' do okna takiego jak: window.onunload = function() {console.log (" pozwala wyładować okna ");}'. Czy mógłbyś być bardziej konkretny, jak to zrobić? Wielkie dzięki. – Simon

+0

Próbowałem próbki na http://www.jakearchibald.com/jsperformance/backforwardcache/ i okazało się, że to nie działa. – Simon

1

Jeśli ustawisz Cache-Control: "no-cache, no-store, must-revalidate" do nagłówków HTTP strona nie będą buforowane w pamięci podręcznej tyłu do przodu.

Firefox uważa również obsługi zdarzeń na beforeunload zdarzenia jako sygnał nie strony sklepu w BFC, ale Safari ignoruje takie teleskopowe, więc lepiej ustawić odpowiednie nagłówki HTTP określający rodzaj zawartości strony (Cacheable lub zmienna)

+0

Dziękuję bardzo, uratowałeś mnie po 3 dniach badań! –

Powiązane problemy