Ich debugge ein Problem mit einer permanenten HTTP 301-Umleitung. Nach einem kurzen Test scheint Safari beim Neustart den Cache von 301 Sekunden zu leeren, Firefox jedoch nicht.
Wann leeren IE, Chrome, Firefox und Safari ihren 301-Cache?
UPDATE: Zum Beispiel, wenn ich umleiten mag example1.com
zu example2.com
, aber ich versehentlich gesetzt zu umleiten example3.com
, das ist ein Problem. Ich kann den Fehler korrigieren, aber jeder, der example1.com
in der Zwischenzeit besucht hat, hat die falsche Weiterleitung zwischengespeichert example3.com
, sodass er weder erreichen kann, example1.com
noch example2.com
bis sein Cache geleert ist. Bei der Untersuchung stelle ich fest, dass keine Cache-Control
und Expires
Header gesetzt wurden. Die Header für die falsche 301-Antwort wären wie folgt gewesen:
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
Meine eigenen Tests zeigen, dass:
- IE7, IE8, Android 2.3.4 werden überhaupt nicht zwischengespeichert.
- Firefox 18.0.2, Safari 5.1.7 (unter Windows 7) und Opera 12.14 alle Cache und löschen Sie den Cache beim Neustart des Browsers.
- IE10- und Chrome 25-Cache, aber beim Neustart des Browsers nicht gelöscht. Wann werden sie gelöscht ?
Antworten:
Mindestens zwei Browser - Chrome und Firefox - speichern eine 301-Weiterleitung ohne Ablaufdatum zwischen .
Das heißt, es bleibt so lange zwischengespeichert, wie der Cache des Browsers es aufnehmen kann. Es wird aus dem Cache entfernt, wenn Sie den Cache manuell leeren oder wenn die Cache-Einträge gelöscht werden, um Platz für neue zu schaffen.
Sie können dies zumindest in Firefox überprüfen,
about:cache
indem Sie es im Festplatten-Cache aufrufen und suchen.Ich weiß nichts über das Verhalten anderer Browser wie IE10 / IE11. Da andere Browser es jedoch auf unbestimmte Zeit zwischenspeichern, müssen Sie dies trotzdem berücksichtigen.
In allen Browsern, einschließlich Chrome / Firefox, ist es weiterhin möglich, dieses Standardverhalten mithilfe von Headern zu überschreiben, wie unten beschrieben:
Hinweis: Diese Antwort wurde 2014 geschrieben und das Verhalten des Browsers kann sich im Laufe der Zeit ändern.
Wenn Sie nicht möchten, dass die Umleitung zwischengespeichert wird
Dieses unbestimmte Caching ist nur das Standard- Caching dieser Browser, wenn keine Cache-Control-Header vorhanden sind. Die Logik ist, dass Sie eine "permanente" Umleitung angeben und ihnen keine anderen Caching-Anweisungen geben, sodass sie diese so behandeln, als ob Sie sie auf unbestimmte Zeit zwischengespeichert haben möchten.
Die Browser berücksichtigen weiterhin die Cache-Control- und Expires-Header wie bei jeder anderen Antwort, sofern sie angegeben sind.
Sie können Header wie
Cache-Control: max-age=3600
oderExpires: Thu, 01 Dec 2014 16:00:00 GMT
zu Ihren 301-Weiterleitungen hinzufügen . Sie können sogar hinzufügen,Cache-Control: no-cache
damit es nicht dauerhaft vom Browser zwischengespeichert wird oder vom BrowserCache-Control: no-store
nicht einmal vorübergehend gespeichert werden kann.Eine bessere Alternative ist meiner Meinung nach jedoch die Verwendung einer 302- oder 307-Umleitung. Diese bedeuten für Browser oder Caches nicht, dass es sich um "permanente" Weiterleitungen handelt, und sollten daher nicht zwischengespeichert werden, wenn keine Cache-Control-Header vorhanden sind.
Für mich scheint es, als würde eine 301-Weiterleitung ausgegeben, aber wenn sie als nicht zwischenspeicherbar markiert wird, widerspricht dies dem Geist einer 301-Weiterleitung, auch wenn sie technisch gültig sein kann. YMMV, und Sie können Randfälle finden, in denen es sinnvoll ist, dass eine "permanente" Umleitung ein Zeitlimit hat.
Wenn Sie zuvor eine 301-Umleitung ausgegeben haben, dies aber deaktivieren möchten
Wenn Benutzer die zwischengespeicherte 301-Weiterleitung noch in ihrem Browser haben, werden sie weiterhin zur Zielseite weitergeleitet, unabhängig davon, ob auf der Quellseite die Weiterleitung noch vorhanden ist. Ihre Optionen zur Behebung dieses Problems umfassen:
Die einfachste und beste Lösung besteht darin, eine weitere 301-Umleitung erneut auszugeben.
Der Browser erkennt, dass er zu einer zuvor nicht in Betrieb genommenen URL zurückgeleitet wird. Dies sollte dazu führen, dass diese URL erneut abgerufen wird, um zu bestätigen, dass die alte Weiterleitung noch nicht vorhanden ist.
Bearbeiten: Einige Kommentare werfen Zweifel auf, siehe unten.
Wenn Sie keine Kontrolle über die Site haben, zu der das vorherige Weiterleitungsziel gegangen ist, haben Sie kein Glück. Versuchen Sie, den Websitebesitzer zu bitten, zu Ihnen zurückzuleiten.
Auch Vorbeugen ist besser als Heilen - vermeiden Sie eine 301-Weiterleitung, wenn Sie nicht sicher sind, ob Sie die alte URL dauerhaft außer Betrieb setzen möchten.
quelle
http://www.SOMEHOST.com
zuhttps://www.SOMEHOST.com
. Aber jetzthttp://www.SOMEHOST.com
muss primärer Host für die Site sein. Umleiten von https nach http entfernt. Wie Sie zeigen, habe ich 301 vonhttps://www.SOMEHOST.com
nach umgeleitethttp://www.SOMEHOST.com
, aber siehe Schleife. Browser hat nicht erneutAus Chrome 71
Um eine permanente Umleitung zu löschen, gehen Sie zu chrome: // settings / clearBrowserData und löschen Sie von dort nur die Umleitung, indem Sie "zwischengespeicherte Bilder und Dateien" löschen.
Chrome 48-70
Gehen Sie zu chrome: // net-internals. Klicken Sie rechts in der oberen roten Statusleiste auf den Abwärtspfeil ▼, um das Dropdown-Menü zu öffnen, und wählen Sie in der Gruppe "Extras" die Option "Cache löschen".
Ab Version 48 war dies das einzige, was für mich funktioniert hat, um einen zwischengespeicherten 301 zu löschen.
quelle
Eine Antwort, die denjenigen hilft, die den Redirect-Cache unbedingt loswerden möchten:
Chrome speichert die 301-Umleitung unendlich zwischen (im lokalen Festplatten-Cache). So löschen Sie diesen Cache:
F12
)F5
)Wenn alles in Ordnung ist, können Sie "Cache deaktivieren" deaktivieren und alles funktioniert wie erwartet weiter.
quelle
localhost:8000
bislocalhost
(Port 80). Ich habe auch die gesamten Site- / Anwendungsdaten von localhost und localhost: 8000 gelöscht, aber dies hat auch nicht geholfen.Lassen Sie den Benutzer ein Post-Formular für diese URL senden und die zwischengespeicherte Weiterleitung ist weg :)
quelle
301
ist eine zwischenspeicherbare Antwort pro HTTP-RFC, die von Browsern abhängig von den HTTP-Caching-Headern zwischengespeichert wird, die Sie in der Antwort haben. Verwenden Sie FireBug oder Charles, um die Antwortheader zu untersuchen und die genaue Dauer zu ermitteln, für die die Antwort zwischengespeichert wird.Wenn Sie die Caching-Dauer steuern möchten, können Sie die HTTP-Antwortheader verwenden
Cache-Control
undExpires
dasselbe tun. Wenn Sie die301
Antwort überhaupt nicht zwischenspeichern möchten, verwenden Sie alternativ die folgenden Header.quelle
Es gibt eine sehr einfache Möglichkeit, den Browser-Cache für http-Weiterleitungen zu entfernen, z. B. 301, 307 usw.
Sie können das Netzwerkfenster in der Entwicklerkonsole in Chrome öffnen. Wählen Sie den Netzwerkanruf aus. Klicken Sie mit der rechten Maustaste darauf und klicken Sie dann auf Browser-Cache löschen , um die zwischengespeicherte Umleitung zu entfernen.
quelle
Bestätigt!! Lassen Sie den Benutzer eine Post-Anfrage an die betroffene URL senden, und die zwischengespeicherte Weiterleitung wird vergessen.
Ein schneller Gewinn wäre, dies in die Browserkonsole einzugeben, wenn Sie können:
fetch('example.com/affected/link', {method: 'post'}).then(() => {})
Nützlich, wenn Sie den betroffenen Browser kennen (insbesondere während der Entwicklung).
Wenn Sie alternativ Zugriff auf die vorherige 301-Umleitungsseite haben, können Sie dieses Skript zur Seite hinzufügen. Bei jedem Besuch wird die zwischengespeicherte 301 vergessen.
quelle
Ich werde eine Antwort posten, die mir geholfen hat:
gehe zur URL:
es sollte Popup aufrufen und dann ..
cached images and files
.from beginning
quelle
als Antwort von @thomasrutter
In der Tat bedeutet dies:
a.com 301 bis b.com
Löschen Sie die 301 von a.com
füge b.com 301 zu a.com hinzu
Dann funktioniert es.
quelle
a.com
301 -> b.com) (a.com
301 löschen ) (a.com/abcdefg
301 -> hinzufügena.com
) und den Client zwingen,a.com/abcdefg
irgendwie anzuzeigen ?Ich habe eine einfache Lösung, die auf allen gängigen Browsern (neueste Version) funktioniert, einschließlich IE, Chrome und FF
quelle
Zu Testzwecken (um zwischengespeicherte Weiterleitungen zu vermeiden) können Benutzer das NEUE PRIVATE FENSTER öffnen : Klicken Sie auf
CTRL+SHIFT+
N
[Wenn Sie Mozilla verwenden, verwenden SieP
]quelle
Testen Sie Ihre Weiterleitungen im Inkognito / InPrivate-Modus. Wenn Sie den Browser schließen, wird der Cache geleert und das erneute Öffnen des Fensters enthält den Cache nicht.
quelle
Wie die anderen Antworten zeigen. Das Caching kann im Browser auf unbestimmte Zeit erfolgen. Das ist extrem gefährlich. Also tu es nicht. Fügen Sie mindestens Cache-Header hinzu. In htaccess mache ich es immer so, indem ich jetzt überhaupt zwischenspeichere:
quelle
Um das Problem mit einer lokalen Hostadresse zu lösen, habe ich die Portnummer geändert, unter der die Site ausgeführt wurde. Dies funktionierte unter Chrome Version 73.0.3683.86.
quelle
In der neuesten Google Chrome-Version 79 können Sie chrome: // net-internals verwenden und im linken Bereich DNS auswählen und dann auf die Schaltfläche Host-Cache löschen tippen
quelle