525 Stimmen

Wie lange zwischenspeichern Browser HTTP 301s?

Ich bin dabei, ein Problem mit einer permanenten HTTP 301-Umleitung zu beheben. Nach einem kurzen Test scheint es, dass Safari seinen Cache von 301s löscht, wenn er neu gestartet wird, aber Firefox tut das nicht.

Wann leeren IE, Chrome, Firefox und Safari ihren Cache von 301s?

Wenn ich zum Beispiel Folgendes umleiten möchte 1.example a 2.example aber ich habe versehentlich die Umleitung auf 3.example ist das ein Problem. Ich kann den Fehler korrigieren, aber jeder, der die Seite besucht hat 1.example in der Zwischenzeit die falsche Umleitung zu 3.example und können daher auch nicht erreichen 1.example o 2.example bis ihr Cache geleert wird. Bei der Untersuchung stelle ich fest, dass es keine Cache-Control y Expires Kopfzeilen gesetzt. Die Kopfzeilen für die falsche 301-Antwort hätten wie folgt ausgesehen:

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://3.example/
Content-Type: text/html

Das zeigen meine eigenen Tests:

  • IE7, IE8 und Android 2.3.4 haben keinen Cache.
  • Firefox 18.0.2, Safari 5.1.7 (unter Windows 7) und Opera 12.14 alle Cache und leeren den Cache beim Neustart des Browsers.
  • Der Cache von IE10 und Chrome 25 wird beim Neustart des Browsers nicht gelöscht, Wann werden sie also freigegeben?

21 Stimmen

Bitte sagen Sie Chrome, dass wir einen Ausweg aus diesem 301-Höllenloch brauchen: bugs.chromium.org/p/chromium/issues/

0 Stimmen

@BT Da das Problem alle Browser betrifft, kann es eigentlich nur von der IETF gelöst werden, wahrscheinlich durch die Festlegung eines obligatorischen Timeouts für zwischengespeicherte 301er, die keine TTL haben, so dass die Browser ihre zwischengespeicherten Annahmen schließlich erneut überprüfen.

2 Stimmen

Ich habe auf der IETF-Mailingliste eine Diskussion darüber begonnen, falls sich jemand, der dieses Thema noch verfolgt, einbringen möchte: lists.w3.org/Archives/Public/ietf-http-wg/2017OctDec/0363.html

412voto

thomasrutter Punkte 109036

In Ermangelung von Cache-Steuerungsanweisungen, die etwas anderes vorschreiben, wird eine 301-Weiterleitung standardmäßig ohne Ablaufdatum zwischengespeichert.

Das heißt, sie bleibt so lange im Cache, wie der Browser sie aufnehmen kann. Sie wird aus dem Cache entfernt, wenn Sie den Cache manuell löschen oder wenn die Cache-Einträge geleert werden, um Platz für neue Einträge zu schaffen.

Sie können dies zumindest in Firefox überprüfen, indem Sie zu about:cache und unter Festplatten-Cache zu finden. Das funktioniert auch in anderen Browsern wie Chrome und dem auf Chromium basierenden Edge, obwohl diese keine about:cache um den Cache zu inspizieren.

In allen Browsern ist es möglich, dieses Standardverhalten mit Hilfe von Caching-Direktiven außer Kraft zu setzen, wie unten beschrieben:

Wenn Sie nicht möchten, dass die Weiterleitung zwischengespeichert wird

Diese unbestimmte Zwischenspeicherung ist nur die Standard Zwischenspeicherung durch diese Browser, wenn keine anderslautenden Header vorhanden sind. Die Logik besteht darin, dass Sie eine "permanente" Weiterleitung angeben und keine weiteren Anweisungen für die Zwischenspeicherung geben, so dass sie so behandelt werden, als ob Sie eine unbegrenzte Zwischenspeicherung wünschen.

Die Browser berücksichtigen die Header Cache-Control und Expires wie bei jeder anderen Antwort, sofern sie angegeben sind.

Sie können Kopfzeilen hinzufügen wie Cache-Control: max-age=3600 ou Expires: Thu, 01 Dec 2014 16:00:00 GMT zu Ihren 301-Weiterleitungen. Sie könnten sogar hinzufügen Cache-Control: no-cache damit sie nicht dauerhaft vom Browser zwischengespeichert werden oder Cache-Control: no-store Sie kann also nicht einmal vom Browser zwischengespeichert werden.

Wenn Sie jedoch nicht wollen, dass Ihre Weiterleitung dauerhaft ist, ist es vielleicht besser, eine 302- oder 307-Weiterleitung zu verwenden. Eine 301-Weiterleitung auszustellen, sie aber als nicht cachefähig zu markieren, verstößt gegen die Geist wofür eine 301-Weiterleitung gedacht ist, auch wenn sie technisch gesehen gültig ist. YMMV, und Sie können Randfälle finden, in denen es für eine "permanente" Weiterleitung sinnvoll ist, eine Zeitbegrenzung zu haben. Beachten Sie, dass 302- und 307-Weiterleitungen von den Browsern standardmäßig nicht zwischengespeichert werden.

Wenn Sie zuvor eine 301-Weiterleitung eingerichtet haben, diese aber wieder rückgängig machen möchten

Wenn die Besucher die 301-Weiterleitung noch in ihrem Browser gespeichert haben, werden sie weiterhin auf die Zielseite weitergeleitet, unabhängig davon, ob die Quellseite noch die Weiterleitung enthält. Sie haben folgende Möglichkeiten, dies zu beheben:

  • Eine einfache Lösung besteht darin, eine weitere Umleitung zurückzuschicken.

    Wenn der Browser während einer Weiterleitung ein zweites Mal auf dieselbe URL verwiesen wird, sollte er sie erneut vom Ursprung abrufen, anstatt sie erneut aus dem Cache umzuleiten, um eine Weiterleitungsschleife zu vermeiden. Aus den Kommentaren zu dieser Antwort geht hervor, dass dies jetzt in allen gängigen Browsern funktioniert - aber es kann sein, dass es bei einigen kleineren Browsern nicht funktioniert.

  • Wenn Sie keine Kontrolle über die Website haben, auf die das vorherige Weiterleitungsziel verweist, haben Sie Pech gehabt. Versuchen Sie, den Eigentümer der Website zu bitten, auf Sie umzuleiten.

Vorbeugen ist besser als heilen - vermeiden Sie eine 301-Weiterleitung, wenn Sie nicht sicher sind, dass Sie die alte URL dauerhaft außer Betrieb nehmen wollen.

330voto

McGuireV10 Punkte 8939

Von Chrome 71

Um eine permanente Weiterleitung zu löschen, gehen Sie zu chrome://settings/clearBrowserData und löschen Sie dort nur die "zwischengespeicherten Bilder und Dateien", um die Weiterleitung zu löschen.

Chrom 48-70

Gehen Sie zu chrome://net-internals. Klicken Sie auf der rechten Seite der oberen roten Statusleiste auf den Pfeil nach unten, um das Dropdown-Menü zu öffnen, und wählen Sie in der Gruppe "Tools" die Option "Cache löschen".

Ab Version 48 war dies das Einzige, was bei mir funktionierte, um eine gecachte 301 zu löschen.

247voto

Olaf Punkte 9789

Eine Antwort, die denjenigen hilft, die verzweifelt den Umleitungscache loswerden wollen:

Chrome speichert die 301-Weiterleitung unendlich lange (im lokalen Festplattencache). So löschen Sie diesen Cache:

  • öffnen Sie Ihr DevTools (Presse F12 )
  • über die Netzwerk überprüfen Sie die Registerkarte "Cache deaktivieren" Ankreuzfeld
  • DevTools geöffnet lassen und neu laden die Seite (drücken Sie F5 )

Wenn alles in Ordnung ist, können Sie das Häkchen bei "Cache deaktivieren" entfernen, und alles funktioniert wieder wie erwartet.

81voto

Rajesh Paul Punkte 6284

Es gibt eine sehr einfache Möglichkeit, den Browser-Cache für http-Weiterleitungen (z. B. 301, 307 usw.) zu löschen.

Sie können das Netzwerkpanel in der Entwicklerkonsole in Chrome öffnen. Wählen Sie den Netzwerkaufruf aus. Klicken Sie mit der rechten Maustaste darauf und klicken Sie dann auf Browser-Cache löschen um die zwischengespeicherte Umleitung zu entfernen.

network call context menu

54voto

Krtek Net Punkte 674

Lassen Sie den Benutzer ein Post-Formular auf dieser URL abschicken und die zwischengespeicherte Umleitung ist weg :)

<body onload="document.forms[0].submit()">
<form action="https://forum.pirati.cz/unreadposts.html" method="post">
    <input type="submit" value="fix" />
</form>
</body>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X