Wiki

A universe of ideas

User Tools

Site Tools


computer:web:redirects

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 (V)
(by default)
Möglich (üblich [2]):
POST → GET
302 Found
(v1.0: “Moved temporarily”)
RFC 1945 (1996) RFC 7231 (2014) Zeitweise (V)
(not by default)
Möglich (üblich [2]):
POST → GET
303 See Other RFC 2616 (1999)
RFC 2068 (1997)
RFC 7231 (2014) Zeitweise (V)
(not by default)
Verpflichtend:
* → GET oder HEAD
307 Temporary Redirect RFC 2616 (1999) RFC 7231 (2014) Zeitweise (V)
(not by default)
308 Permanent Redirect RFC 7238 (2014) RFC 7538 (2015) Permanent (V)
(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 (V) (not by default) [5] (V) (not by default) [6]
303 (X) [7] (V) (not by default) [8]
307 (V) (not by default) [9] (V) (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

<noscript>
    <meta http-equiv="refresh" content="0; url=?nojs" />
</noscript>

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.

Weitere Infos

computer/web/redirects.txt · Last modified: 2020-11-18 18:11 by 127.0.0.1