Eine Übersicht über Möglichkeiten für Weiterleitungen, die über die klassischen 301 und 302 Status-Codes hinausgeht (zumindest ein bisschen).
Status | Nachricht | Spezifikation | Dauer | Cachability | Methodenänderung | |
---|---|---|---|---|---|---|
Erste | Aktuelle [1] | |||||
301 | Moved Permanently | RFC 1945 (1996) | RFC 7231 (2014) | Permanent | (by default) | Möglich (üblich [2]): POST → GET |
302 | Found (v1.0: “Moved temporarily”) | RFC 1945 (1996) | RFC 7231 (2014) | Zeitweise | (not by default) | Möglich (üblich [2]): POST → GET |
303 | See Other | RFC 2616 (1999) RFC 2068 (1997) | RFC 7231 (2014) | Zeitweise | (not by default) | Verpflichtend: * → GET oder HEAD |
307 | Temporary Redirect | RFC 2616 (1999) | RFC 7231 (2014) | Zeitweise | (not by default) | – |
308 | Permanent Redirect | RFC 7238 (2014) | RFC 7538 (2015) | Permanent | (by default) | – |
Nicht vergessen:
Cache-Control
mitschicken.
<meta http-equiv="refresh" content="0; url=http://example.com/">
als fallback verwendet werden [3], aber auch wenn der RFC das vorschlägt ist die Methode lange deprecated.
Seit RFC 7231 (2014) ist die Speicherbarkeit von Status-Code 302, 303 und 307 nicht mehr explizit definiert. Die Antworten sind daher alle speicherbar, aber nicht standardmäßig [4].
Status-Code | Speicherbarkeit | |
---|---|---|
Vorher | Nachher | |
302 | (not by default) [5] | (not by default) [6] |
303 | [7] | (not by default) [8] |
307 | (not by default) [9] | (not by default) [10] |
Es ist daher Ratsam immer Cache-Control
mitschicken. Cloudflare speichert zum Beispiel auch 302 für ca. 20 Minuten.
Location
Header. Alle Versionen stehen im Body (Browser dürfte, wenn er den Body verstünde, passende Version selber auswählen). [11]
Die folgenden drei Statements haben die identische Funktion [14]. Sie leiten den Benutzer weiter und erzeugen dabei einen weiteren Eintrag in der Histroy. Wenn man von Seite A auf Seite B geht, wo dann die Weiterleitung auf Seite C stattfindet, dann landet der Benutzer mit dem Zurück-Button wieder auf Seite B.
location = "http://www.example.com/"; location.href = "http://www.example.com/"; location.assign("http://www.example.com/");
Ersetzt den aktuellen Eintrag in der History. Wenn man von Seite A auf Seite B geht, wo dann die Weiterleitung auf Seite C stattfindet, dann landet der Benutzer mit dem Zurück-Button wieder auf Seite A:
document.location.replace("http://www.example.com/");
Dies ist nur zur Vollständigkeit da, um eine Entsprechung für das Meta-Data Kapitel zu liefern.
Die folgende Funktion läd die Webseite neu. Ist der Parameter false
oder nicht angegeben, kann die Webseite vom Cache geladen werden [15].
document.location.reload(forcedReload);
Dieses Verfahren wurde nie standardisiert und ist seit HTML 4.0 explizit unerwünscht [16]. Dennoch existiert es als living Standard in den meisten Browsern. Folgende Syntax sollte von den meisten Browsern verstanden werden[17][18]:
${SECONDS}; url=${URL}
Die URL kann absolut oder Relativ sein, wird sie Weg gelassen wird die aktuelle Seite neu geladen. Werden die Sekunden weg gelassen wird sofort neu geladen.
Das ganze kann dann entweder in einen HTTP Header eingebaut werden:
Refresh: 5; url=http://example.com
oder als Meta-Tag in den HTML Head:
<meta http-equiv="refresh" content="5; url=http://www.example.org/fresh-as-a-summer-breeze" />
Das kann verwendet werden, wenn ein Dashboard ohne viel Aufwand alle paar Minuten neu geladen werden soll. Als HTTP Header kann man es auch fremden Seiten einschleusen, für die man nur Proxy ist. Mit etwas mehr Aufwand würde man vmtl. Ajax verwenden um nur die Daten des Dashboards zu aktualisieren.
Siehe oben.