Debuguję problem ze stałym przekierowaniem HTTP 301. Po szybkim teście wygląda na to, że Safari usuwa pamięć podręczną z 301 sekund po ponownym uruchomieniu, ale Firefox nie.
Kiedy IE, Chrome, Firefox i Safari usuwają pamięć podręczną 301s?
UPDATE: Na przykład, jeśli chcę, aby przekierować example1.com
do example2.com
, ale przypadkowo ustawić go przekierować do example3.com
, że jest problem. Mogę poprawić błąd, ale każdy, kto odwiedził example1.com
w międzyczasie nie będzie buforowane niepoprawne przekierowanie example3.com
, i tak nie będą w stanie dotrzeć albo example1.com
albo example2.com
dopóki ich cache jest czyszczony. Po dochodzeniu, uważam, że tam nie było Cache-Control
i Expires
ustawić nagłówki. Nagłówki niepoprawnej odpowiedzi 301 wyglądałyby tak:
HTTP/1.1 301 Moved Permanently
Date: Wed, 27 Feb 2013 12:05:53 GMT
Server: Apache/2.2.21 (Unix) DAV/2 PHP/5.3.8
X-Powered-By: PHP/5.3.8
Location: http://example3.com/
Content-Type: text/html
Moje własne testy pokazują, że:
- IE7, IE8, Android 2.3.4 w ogóle nie buforują.
- Firefox 18.0.2, Safari 5.1.7 (w systemie Windows 7) i Opera 12.14 wszystkie pamięci podręcznej i wyczyść pamięć podręczną po ponownym uruchomieniu przeglądarki.
- Pamięć podręczna przeglądarki IE10 i Chrome 25, ale nie usuwaj danych po ponownym uruchomieniu przeglądarki, więc kiedy wyczyszczą?
Odpowiedzi:
Co najmniej dwie przeglądarki - Chrome i Firefox - będą buforować przekierowanie 301 bez daty wygaśnięcia .
Oznacza to, że pozostanie w pamięci podręcznej tak długo, jak długo pamięć podręczna przeglądarki będzie w stanie to pomieścić. Zostanie on usunięty z pamięci podręcznej, jeśli ręcznie wyczyścisz pamięć podręczną lub jeśli wpisy w pamięci podręcznej zostaną wyczyszczone, aby zrobić miejsce dla nowych.
Możesz to zweryfikować przynajmniej w przeglądarce Firefox, przechodząc do
about:cache
i znajdując go w pamięci podręcznej dysku.Nie wiem o zachowaniu innych przeglądarek, takich jak IE10 / IE11. Jednak biorąc pod uwagę, że inne przeglądarki przechowują go w pamięci podręcznej w nieskończoność, i tak będziesz musiał to uwzględnić.
We wszystkich przeglądarkach, w tym Chrome / Firefox, nadal można zastąpić to domyślne zachowanie za pomocą nagłówków, jak opisano poniżej:
Uwaga: ta odpowiedź została napisana w 2014 roku, a zachowanie przeglądarki może z czasem ulec zmianie.
Jeśli nie chcesz, aby przekierowanie było buforowane
To nieokreślone buforowanie jest domyślnym buforowaniem tylko tych przeglądarek przy braku nagłówków Cache-Control. Logika polega na tym, że określasz „trwałe” przekierowanie i nie podajesz im żadnych instrukcji buforowania, więc będą traktować to tak, jakbyś chciał buforować w nieskończoność.
Przeglądarki nadal honorują nagłówki Cache-Control i wygasają nagłówki, jak w przypadku każdej innej odpowiedzi, jeśli są one określone.
Możesz dodać nagłówki takie jak
Cache-Control: max-age=3600
lubExpires: Thu, 01 Dec 2014 16:00:00 GMT
do swoich przekierowań 301. Możesz nawet dodać,Cache-Control: no-cache
aby nie była trwale buforowana przez przeglądarkę lubCache-Control: no-store
aby nie mogła być nawet przechowywana w pamięci tymczasowej przez przeglądarkę.Jednak moim zdaniem lepszą alternatywą jest użycie przekierowania 302 lub 307. Nie sugerują one przeglądarkom ani pamięci podręcznej, że są „stałymi” przekierowaniami, a zatem nie powinny być buforowane przy braku nagłówków Cache-Control.
Wydaje mi się, że wydaje się przekierowanie 301, ale oznaczenie go jako niemożliwego do buforowania jest sprzeczne z duchem tego, do czego służy przekierowanie 301, chociaż może być technicznie poprawne. YMMV i możesz znaleźć przypadki skrajne, w których sensowne jest, aby „trwałe” przekierowanie miało limit czasu.
Jeśli wcześniej wydałeś przekierowanie 301, ale nie chcesz tego robić
Jeśli ludzie nadal mają buforowane przekierowanie 301 w przeglądarce, nadal będą przekierowywani na stronę docelową, niezależnie od tego, czy strona źródłowa nadal ma przekierowanie na swoim miejscu. Dostępne opcje naprawy:
Najprostszym i najlepszym rozwiązaniem jest ponowne wydanie kolejnego przekierowania 301.
Przeglądarka zda sobie sprawę, że jest przekierowywana z powrotem do tego, co wcześniej uważała za wycofany z użytku adres URL, i powinno to spowodować ponowne pobranie tego adresu URL ponownie, aby potwierdzić, że stare przekierowanie nadal nie istnieje.
Edycja: niektóre komentarze podają w to wątpliwości, patrz poniżej.
Jeśli nie masz kontroli nad witryną, do której trafił poprzedni cel przekierowania, masz pecha. Spróbuj błagać właściciela witryny o przekierowanie z powrotem do Ciebie.
Lepiej też zapobiegać niż leczyć - unikaj przekierowania 301, jeśli nie jesteś pewien, czy chcesz na stałe wycofać stary adres URL.
źródło
http://www.SOMEHOST.com
celuhttps://www.SOMEHOST.com
. Ale terazhttp://www.SOMEHOST.com
musi być głównym hostem witryny. Usunięto więc przekierowanie z https na http. Jak pokazałeś, zrobiłem przekierowanie 301 zhttps://www.SOMEHOST.com
nahttp://www.SOMEHOST.com
, ale zobacz pętlę. Przeglądarka nie pobierała ponownie ...Z Chrome 71
Aby usunąć trwałe przekierowanie, przejdź do chrome: // settings / clearBrowserData, a stamtąd wyczyszczenie „buforowanych obrazów i plików” wyczyściło przekierowanie.
Chrome 48–70
Przejdź do chrome: // net-internals. Po prawej stronie górnego czerwonego paska stanu kliknij strzałkę w dół ▼, aby otworzyć menu rozwijane, aw grupie „Narzędzia” wybierz „Wyczyść pamięć podręczną”.
Od wersji 48 była to jedyna rzecz, która działała dla mnie, aby wyczyścić pamięć podręczną 301.
źródło
Odpowiedź, która pomaga tym, którzy desperacko chcą pozbyć się pamięci podręcznej przekierowania:
Chrome buforuje przekierowanie 301 w nieskończoność (w lokalnej pamięci podręcznej dysku). Aby wyczyścić tę pamięć podręczną:
F12
)F5
)Gdy wszystko będzie w porządku, możesz odznaczyć opcję „Wyłącz pamięć podręczną”, a wszystko będzie działać zgodnie z oczekiwaniami.
źródło
localhost:8000
dolocalhost
(port 80). Wyczyściłem również całą witrynę / dane aplikacji zarówno z localhost, jak i localhost: 8000, ale to też nie pomogło.Niech użytkownik prześle formularz postu na ten adres URL, a przekierowanie z pamięci podręcznej zniknie :)
źródło
301
jest buforowalną odpowiedzią na HTTP RFC, a przeglądarki będą ją buforować w zależności od nagłówków HTTP buforowania, które masz na odpowiedzi. Użyj FireBug lub Charles, aby sprawdzić nagłówki odpowiedzi, aby poznać dokładny czas trwania buforowania odpowiedzi.Jeśli chcesz kontrolować czas buforowania, możesz użyć nagłówków odpowiedzi HTTP
Cache-Control
iExpires
zrobić to samo. Alternatywnie, jeśli w ogóle nie chcesz buforować301
odpowiedzi, użyj następujących nagłówków.źródło
Istnieje bardzo prosty sposób na usunięcie pamięci podręcznej przeglądarki dla przekierowań HTTP, np. 301, 307 itp.
Możesz otworzyć panel sieciowy w konsoli programisty w chrome. Wybierz połączenie sieciowe. Kliknij go prawym przyciskiem myszy, a następnie kliknij polecenie Wyczyść pamięć podręczną przeglądarki, aby usunąć buforowane przekierowanie.
źródło
Potwierdzony!! poproś użytkownika o przesłanie żądania wpisu do adresu URL, którego dotyczy problem, a przekierowanie w pamięci podręcznej zostanie zapomniane.
Szybką wygraną byłoby wprowadzenie tego w konsoli przeglądarki, jeśli możesz:
fetch('example.com/affected/link', {method: 'post'}).then(() => {})
Przydatne, jeśli znasz przeglądarkę, której dotyczy problem (szczególnie podczas programowania).
Alternatywnie , jeśli masz dostęp do poprzedniej strony przekierowania 301, możesz dodać ten skrypt do strony i za każdym razem, gdy zostanie ona odwiedzona, pamięć podręczna 301 zostanie zapomniana.
źródło
Zamieszczę odpowiedź, która pomogła mi:
przejdź do adresu URL:
powinien wywołać wyskakujące okienko, a następnie ...
cached images and files
.from beginning
źródło
jako odpowiedź @thomasrutter
W rzeczywistości oznacza to:
a.com 301 na b.com
usuń 301 z a.com
dodaj b.com 301 do a.com
To działa.
źródło
a.com
301 -> b.com) (usuńa.com
301) (dodaja.com/abcdefg
301 ->a.com
) i zmuś klienta, abya.com/abcdefg
jakoś wyświetlił ?Mam proste rozwiązanie, które działało na wszystkich głównych przeglądarkach (najnowsza wersja), w tym IE, Chrome i FF
źródło
Do celów testowych (w celu uniknięcia buforowanych przekierowań) ludzie mogą otwierać NOWE PRYWATNE OKNO : kliknij
CTRL+SHIFT+
N
[jeśli używasz Mozilli, użyjP
]źródło
Przetestuj przekierowania w trybie incognito / InPrivate, aby po zamknięciu przeglądarki opróżnić pamięć podręczną i ponownie otworzyć okno nie będzie zawierać pamięci podręcznej.
źródło
Jak pokazują inne odpowiedzi. Buforowanie może być nieograniczone w przeglądarce. To jest bardzo niebezpieczne. Więc nie rób tego. Przynajmniej dodaj nagłówki pamięci podręcznej. W htaccess zawsze robię to w ten sposób, teraz w ogóle buforuję:
źródło
Aby rozwiązać problem dotyczący adresu localhost, zmieniłem numer portu, pod którym działała strona. To działało na Chrome w wersji 73.0.3683.86.
źródło
W najnowszej wersji Google Chrome 79 możesz użyć chrome: // net-internals i wybrać na DNS z lewego panelu, a następnie stuknąć przycisk Wyczyść pamięć podręczną hosta
źródło