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

6voto

Dung Le Punkte 91

Ich habe eine einfache Lösung, die auf allen gängigen Browsern (neueste Version) funktioniert, einschließlich IE, Chrome und FF

  1. Strg + Umschalt + Entf
  2. -
    1. Chrom: Wählen Sie "Browserverlauf" und "Cache...".
    2. IE: Ich lasse die Standardoptionen "Temporäre Internetdateien und Websitedateien", "Cookies und Websitedaten", "Verlauf"
    3. FF: "Browsing- und Download-Verlauf", "Cache"
  3. Klicken Sie auf "Löschen".
  4. Schließen Sie Ihren Browser und öffnen Sie ihn erneut. Es sollte funktionieren

6voto

Mohammad Ersan Punkte 12093

In der neuesten Google Chrome Version 79 können Sie die chrome://net-internals und wählen Sie im linken Bereich DNS aus, tippen Sie dann auf die Schaltfläche Host-Cache löschen

Screenshot of chrome opening the net-internals page

4voto

yunzen Punkte 31443

Wie die anderen Antworten zeigen, kann die Zwischenspeicherung in Browsern von unbestimmter Dauer sein. Dies ist extrem gefährlich lästig. Tun Sie es also nicht. Fügen Sie zumindest Cache-Header hinzu. In der htaccess mache ich das immer so, ohne Caching überhaupt:

<IfModule mod_rewrite.c>
  RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
  # The E=nocache:1 sets the environment variable nocache to the value of one
  RewriteRule ^/?(.*) https://www.example.org/$1 [L,R=301,E=nocache:1]
</IfModule>

<IfModule mod_headers.c>
  ## Set the response header if the "nocache" environment variable is set
  ## in the RewriteRule above.
  Header always set Cache-Control "no-store, no-cache, must-revalidate" env=nocache

  ## Set Expires too ...
  Header always set Expires "Thu, 01 Jan 1970 00:00:00 GMT" env=nocache
</IfModule>

Edit :

Wenn Sie in der Vergangenheit keine Zwischenspeicherung von 301-Weiterleitungen vorgenommen haben, müssen Sie vom Ziel zurück zur Quelle weiterleiten. Beispiel:

Wenn Sie das hätten

RewriteRule /my-source /my-target [L,R=301]

Sie müssen dies in die

# RewriteRule /my-source /my-target [L,R=301]
RewriteRule /my-target /my-source [L,R=301]

2voto

combatc2 Punkte 1075

Um das Problem für eine localhost-Adresse zu lösen, änderte ich die Portnummer, unter der die Website lief. Dies funktionierte mit Chrome Version 73.0.3683.86.

1voto

yougotiger Punkte 439

Testen Sie Ihre Weiterleitungen im Inkognito/InPrivate-Modus, damit beim Schließen des Browsers der Cache geleert wird und beim erneuten Öffnen des Fensters der Cache nicht mehr enthalten ist.

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