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

26voto

Alex J Punkte 517

301 ist eine cachefähige Antwort gemäß HTTP RFC und wird von den Browsern in Abhängigkeit von den HTTP-Caching-Headern, die Sie in der Antwort angeben, zwischengespeichert. Verwenden Sie FireBug oder Charles, um die Antwort-Header zu untersuchen und die genaue Dauer zu erfahren, für die die Antwort zwischengespeichert wird.

Wenn Sie die Dauer der Zwischenspeicherung steuern möchten, können Sie die HTTP-Antwort-Header verwenden Cache-Control y Expires dasselbe zu tun. Alternativ können Sie, wenn Sie den Cache nicht 301 Antwort überhaupt, verwenden Sie die folgenden Kopfzeilen.

Cache-Control: no-store, no-cache, must-revalidate
Expires: Thu, 01 Jan 1970 00:00:00 GMT

26voto

Emeke Ajeh Punkte 783

Bestätigt: Der Benutzer sendet eine Post-Anfrage an die betroffene URL, und die im Cache gespeicherte Umleitung wird vergessen.

Ein schneller Sieg wäre es, 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).

Alternativ dazu Wenn Sie Zugriff auf die vorherige 301-Weiterleitungsseite haben, können Sie dieses Skript zu der Seite hinzufügen, und jedes Mal, wenn sie besucht wird, wird die 301-Weiterleitung vergessen.

19voto

John Tribe Punkte 1067

Ich werde die Antwort posten, die mir geholfen hat:

Zur URL gehen:

chrome://settings/clearBrowserData

sollte es ein Popup aufrufen und dann

  • nur auswählen: cached images and files .
  • Zeitfeld auswählen: from beginning

8voto

T.Todua Punkte 48569

Zu Testzwecken (um zwischengespeicherte Weiterleitungen zu vermeiden) kann man die NEUES PRIVATES FENSTER : klick CTRL+SHIFT+N [Wenn Sie Mozilla verwenden, verwenden Sie P ]

8voto

phil han Punkte 109

Als Antwort von @thomasrutter

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 zur Zielseite weitergeleitet, unabhängig davon, ob die Quellseite noch die Weiterleitung enthält. Sie haben folgende Möglichkeiten, dies zu beheben:

Die einfachste und beste Lösung besteht darin, eine weitere 301-Weiterleitung zu erstellen, die wieder zurückführt.

Der Browser wird feststellen, dass er zu einer URL zurückgeleitet wird, von der er zuvor dachte, dass sie außer Betrieb genommen wurde, und dies sollte dazu führen, dass er diese URL erneut abruft, um zu bestätigen, dass die alte Umleitung nicht mehr vorhanden ist.

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

In der Tat bedeutet dies:

  1. a.example 301 bis b.example

  2. löschen a.example 's 301

  3. hinzufügen. b.example 301 bis a.example

Dann funktioniert es.

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