Table of Contents
Weiterleitungen / Redirects
Eine Übersicht über Möglichkeiten für Weiterleitungen, die über die klassischen 301 und 302 Status-Codes hinausgeht (zumindest ein bisschen).
Weiterleitung mit HTTP Status-Codes
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:
- Einen kleinen Body mit einem Link zur Weiterleitung mit zu schicken.
- Immer
Cache-Control
mitschicken.
- In dem Body könnte ein
<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. - Der Link im Body sowie das Meta-Tag können als fallback dienen, wenn der Status-Code recht neu ist.
Änderung der Speicherbarkeit 2014
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.
Weiteres aus dem 3xx Block
- 300 (Multiple Choices): Mehrere Versionen des Dokuments sind unter genaueren URIs erreichbar. Die vom Server bevorzugte Version steht im
Location
Header. Alle Versionen stehen im Body (Browser dürfte, wenn er den Body verstünde, passende Version selber auswählen). [11] - 304 (Not Modified): Wer kennt ihn nicht? Ansonsten RFC 7232 lesen :)
- 305 (Use Proxy): Deprecated [12]
- 306: Der Status-Code ist reserviert und war mal als “Switch Proxy” angedacht [13]
Weitere Infos
Weiterleitungen mit JavaScript
Mit neuem Eintrag in der History
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/");
Mit ersetztem Eintrag in der History
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/");
Seite Neuladen
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);
Weiterleiten/Neuladen mit Refresh Header/Meta-Tag
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" />
Anwendungsfälle
Weiterleiten auf die nicht JavaScript Version einer Webseite
Triviales Neuladen eines Dashboards
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.
Fallback für 3xx Bodys
Siehe oben.