Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Umleitungen in HTTP

URL-Umleitung, auch bekannt als URL-Weiterleitung, ist eine Technik, um einer Seite, einem Formular, einer gesamten Website oder einer Webanwendung mehr als eine URL-Adresse zuzuweisen. HTTP bietet eine spezielle Art von Antwort, die als HTTP-Redirect bezeichnet wird, für diese Operation.

Umleitungen erfüllen zahlreiche Ziele:

  • Temporäre Umleitungen während Wartungsarbeiten oder Ausfallzeiten der Website
  • Permanente Umleitungen, um bestehende Links/Bookmarks nach Änderung der URLs der Website, Fortschrittsseiten beim Hochladen einer Datei usw. zu bewahren

Prinzip

Im HTTP-Protokoll wird eine Umleitung ausgelöst, indem ein Server eine spezielle Redirect-Antwort auf eine Anfrage sendet. Umleitungsantworten haben Statuscodes, die mit 3 beginnen, und einen Location-Header, der die URL enthält, zu der umgeleitet werden soll.

Wenn Browser eine Umleitung empfangen, laden sie sofort die neue URL, die im Location-Header angegeben ist. Abgesehen von dem kleinen Leistungseinbruch durch eine zusätzliche Rundreise, bemerken Benutzer die Umleitung selten.

Eine Anfrage vom Client an den Server. Der Server antwortet mit "301: dauerhaft verschoben" und der neuen URL für die Ressource. Der Client sendet eine GET-Anfrage für die neue URL, die vom Server mit einer 200 OK-Antwort zurückgegeben wird.

Es gibt mehrere Arten von Umleitungen, die in drei Kategorien unterteilt sind:

  1. Permanente Umleitungen
  2. Temporäre Umleitungen
  3. Besondere Umleitungen

Permanente Umleitungen

Diese Umleitungen sind dazu gedacht, dauerhaft zu bestehen. Sie implizieren, dass die ursprüngliche URL nicht mehr verwendet und durch die neue ersetzt werden sollte. Suchmaschinen-Roboter, RSS-Reader und andere Crawler aktualisieren die ursprüngliche URL für die Ressource.

Code Text Methodenbehandlung Typischer Anwendungsfall
301 Moved Permanently GET-Methoden bleiben unverändert. Andere können möglicherweise zu GET geändert werden. [1] Umstrukturierung einer Website.
308 Permanent Redirect Methode und Inhalt nicht geändert. Umstrukturierung einer Website, mit Nicht-GET-Links/-Operationen.

[1] Die Spezifikation wollte keine Methodenänderungen zulassen, aber es gibt bestehende User-Agents, die ihre Methode ändern. 308 wurde erstellt, um die Mehrdeutigkeit des Verhaltens beim Verwenden von Nicht-GET-Methoden zu beseitigen.

Temporäre Umleitungen

Manchmal kann die angeforderte Ressource nicht von ihrem kanonischen Speicherort aus zugegriffen werden, aber sie kann von einem anderen Ort aus zugegriffen werden. In diesem Fall kann eine temporäre Umleitung verwendet werden.

Suchmaschinen-Roboter und andere Crawler speichern die neue, temporäre URL nicht. Temporäre Umleitungen werden auch beim Erstellen, Aktualisieren oder Löschen von Ressourcen verwendet, um temporäre Fortschrittsseiten anzuzeigen.

Code Text Methodenbehandlung Typischer Anwendungsfall
302 Found GET-Methoden bleiben unverändert. Andere können möglicherweise zu GET geändert werden. [2] Die Webseite ist vorübergehend aus unvorhergesehenen Gründen nicht verfügbar.
303 See Other GET-Methoden bleiben unverändert. Andere werden geändert zu GET (Inhalt geht verloren). Wird verwendet, um nach einer PUT- oder einer POST-Operation umzuleiten, sodass das Aktualisieren der Ergebnis-Seite die Operation nicht erneut auslöst.
307 Temporary Redirect Methode und Inhalt nicht geändert. Die Webseite ist vorübergehend aus unvorhergesehenen Gründen nicht verfügbar. Besser als 302, wenn auf der Webseite Nicht-GET-Operationen verfügbar sind.

[2] Die Spezifikation wollte keine Methodenänderungen zulassen, aber es gibt bestehende User-Agents, die ihre Methode ändern. 307 wurde erstellt, um die Mehrdeutigkeit des Verhaltens beim Verwenden von Nicht-GET-Methoden zu beseitigen.

Besondere Umleitungen

304 (Not Modified) leitet eine Seite auf die lokal zwischengespeicherte Kopie (die veraltet war) um, und 300 (Multiple Choices) ist eine manuelle Umleitung: Der Inhalt, der vom Browser als Webseite präsentiert wird, listet die möglichen Umleitungen auf, und der Benutzer klickt auf eine, um sie auszuwählen.

Code Text Typischer Anwendungsfall
300 Multiple Choices Nicht viele: Die Auswahlmöglichkeiten sind in einer HTML-Seite im Inhalt aufgeführt. Maschinenlesbare Auswahlmöglichkeiten sollten ermutigt werden, als Link-Header mit rel=alternate gesendet zu werden.
304 Not Modified Gesendet bei rekonditionierten bedingten Anfragen. Gibt an, dass die zwischengespeicherte Antwort noch frisch ist und verwendet werden kann.

Alternative Möglichkeit zur Angabe von Umleitungen

HTTP-Umleitungen sind nicht die einzige Möglichkeit, Umleitungen zu definieren. Es gibt zwei weitere:

  1. HTML-Umleitungen mit dem <meta>-Element
  2. JavaScript-Umleitungen über das DOM

HTML-Umleitungen

HTTP-Umleitungen sind der beste Weg, Umleitungen zu erstellen, aber manchmal hat man keine Kontrolle über den Server. In diesem Fall versuchen Sie, ein <meta>-Element mit seinem http-equiv-Attribut auf Refresh im <head> der Seite zu setzen. Beim Anzeigen der Seite wird der Browser zur angegebenen URL wechseln.

html
<head>
  <meta http-equiv="Refresh" content="0; URL=https://example.com/" />
</head>

Das content-Attribut sollte mit einer Zahl beginnen, die angibt, wie viele Sekunden der Browser warten soll, bevor er zur angegebenen URL umleitet. Setzen Sie es immer auf 0, um die Zugänglichkeit zu gewährleisten.

Offensichtlich funktioniert diese Methode nur mit HTML und kann nicht für Bilder oder andere Arten von Inhalten verwendet werden.

JavaScript-Umleitungen

Umleitungen in JavaScript werden durchgeführt, indem ein URL-String auf die window.location-Eigenschaft gesetzt wird, wodurch die neue Seite geladen wird:

js
window.location = "https://example.com/";

Wie HTML-Umleitungen kann dies nicht bei allen Ressourcen funktionieren, und offensichtlich funktioniert dies nur bei Clients, die JavaScript ausführen. Auf der anderen Seite gibt es mehr Möglichkeiten: Zum Beispiel kann die Umleitung nur ausgelöst werden, wenn bestimmte Bedingungen erfüllt sind.

Prioritätsreihenfolge

Mit drei Möglichkeiten, Umleitungen auszulösen, können mehrere gleichzeitig verwendet werden. Aber welche wird zuerst ausgeführt?

  1. HTTP-Umleitungen werden immer zuerst ausgeführt - sie existieren, wenn nicht einmal eine übertragene Seite vorhanden ist.
  2. Etwas überraschend werden JavaScript-Umleitungen als nächstes ausgeführt, vor HTML-Umleitungen. Dies liegt daran, dass die <meta>-Umleitung nach dem vollständigen Laden der Seite erfolgt, was erst nach der Ausführung aller Skripte geschieht.
  3. HTML-Umleitungen (<meta>) werden ausgeführt, wenn es keine HTTP-Umleitungen oder JavaScript-Umleitungen gibt, die vor dem Laden der Seite ausgeführt wurden.
  4. Wenn es eine JavaScript-Umleitung gibt, die nach dem Laden der Seite erfolgt (zum Beispiel bei einem Mausklick), wird sie zuletzt ausgeführt, wenn die Seite nicht bereits von den vorherigen Methoden umgeleitet wurde.

Sofern möglich, verwenden Sie HTTP-Umleitungen und fügen Sie keine <meta>-Umleitungen hinzu. Wenn jemand die HTTP-Umleitungen ändert, aber vergisst, die HTML-Umleitungen zu ändern, sind die Umleitungen nicht mehr identisch, was zu einer Endlosschleife oder anderen Problemen führen könnte.

Anwendungsfälle

Es gibt zahlreiche Anwendungsfälle für Umleitungen, aber da die Leistung bei jeder Umleitung beeinträchtigt wird, sollte ihre Verwendung auf ein Minimum beschränkt werden.

Domain-Alias

Idealerweise gibt es einen Standort und damit eine URL für jede Ressource. Es gibt jedoch Gründe für alternative Namen einer Ressource:

Die Reichweite Ihrer Website erweitern

Ein häufiger Fall ist, wenn eine Website unter www.example.com betrieben wird, der Zugriff aber auch von example.com aus funktionieren soll. Umleitungen von example.com zu www.example.com werden daher eingerichtet. Sie könnten auch von häufigen Synonymen oder Tippfehlern Ihrer Domains umleiten.

Umzug zu einer neuen Domain

Zum Beispiel, Ihre Firma wurde umbenannt, aber Sie möchten, dass bestehende Links oder Bookmarks Sie weiterhin unter dem neuen Namen finden können.

Erzwingen von HTTPS

Anfragen an die http://-Version Ihrer Website werden zu der https://-Version Ihrer Website umgeleitet.

Wenn Sie Websites umstrukturieren, ändern sich URLs. Selbst wenn Sie die Links Ihrer Website aktualisieren, um den neuen URLs zu entsprechen, haben Sie keine Kontrolle über die URLs, die von externen Ressourcen verwendet werden.

Sie möchten diese Links nicht unterbrechen, da sie wertvolle Nutzer bringen und Ihrer SEO helfen, also richten Sie Umleitungen von den alten URLs zu den neuen ein.

Hinweis: Diese Technik funktioniert für interne Links, aber versuchen Sie, interne Umleitungen zu vermeiden. Eine Umleitung hat erhebliche Leistungskosten (da eine zusätzliche HTTP-Anfrage erfolgt). Wenn Sie dies vermeiden können, indem Sie interne Links korrigieren, sollten Sie diese Links stattdessen beheben.

Temporäre Antworten auf unsichere Anfragen

Unsichere Anfragen ändern den Zustand des Servers und der Benutzer sollte sie nicht unabsichtlich erneut senden.

Typischerweise möchten Sie nicht, dass Ihre Benutzer PUT, POST oder DELETE-Anfragen erneut senden. Wenn Sie die Antwort als Ergebnis dieser Anfrage bereitstellen, wird ein Drücken der Aktualisieren-Schaltfläche die Anfrage erneut senden (möglicherweise nach einer Bestätigungsnachricht).

In diesem Fall kann der Server eine 303 (See Other)-Antwort für eine URL senden, die die richtigen Informationen enthält. Wenn die Aktualisieren-Schaltfläche gedrückt wird, wird nur diese Seite neu angezeigt, ohne die unsicheren Anfragen erneut auszulösen.

Temporäre Antworten auf lange Anfragen

Einige Anfragen benötigen möglicherweise mehr Zeit auf dem Server, wie DELETE-Anfragen, die zur späteren Verarbeitung geplant sind. In diesem Fall ist die Antwort eine 303 (See Other)-Umleitung, die auf eine Seite verlinkt, die anzeigt, dass die Aktion geplant wurde, und eventuell Fortschritte darüber informiert oder es Ihnen ermöglicht, sie abzubrechen.

Umleitungen in gängigen Servern konfigurieren

Apache

Umleitungen können entweder in der Serverkonfigurationsdatei oder in der .htaccess-Datei jedes Verzeichnisses eingerichtet werden.

Das mod_alias-Modul verfügt über Redirect und RedirectMatch-Direktiven, die standardmäßig 302-Umleitungen einrichten:

apacheconf
<VirtualHost *:443>
  ServerName example.com
  Redirect / https://www.example.com
</VirtualHost>

Die URL https://example.com/ wird zu https://www.example.com/ umgeleitet, ebenso wie alle Dateien oder Verzeichnisse unter dieser (https://example.com/some-page wird zu https://www.example.com/some-page umgeleitet).

RedirectMatch tut dasselbe, nimmt aber einen regulären Ausdruck an, um eine Sammlung betroffener URLs zu definieren:

apacheconf
RedirectMatch ^/images/(.*)$ https://images.example.com/$1

Alle Dokumente im Verzeichnis images/ werden zu einer anderen Domain umgeleitet.

Wenn Sie keine temporäre Umleitung möchten, können Sie mit einem zusätzlichen Parameter (entweder dem zu verwendenden HTTP-Statuscode oder dem Schlüsselwort permanent) eine andere Umleitung einrichten:

apacheconf
Redirect permanent / https://www.example.com
# …acts the same as:
Redirect 301 / https://www.example.com

Das mod_rewrite-Modul kann ebenfalls Umleitungen erstellen. Es ist flexibler, aber etwas komplexer.

Nginx

In Nginx erstellen Sie einen spezifischen Serverblock für den Inhalt, den Sie umleiten möchten:

nginx
server {
  listen 80;
  server_name example.com;
  return 301 $scheme://www.example.com$request_uri;
}

Um eine Umleitung auf ein Verzeichnis oder nur bestimmte Seiten anzuwenden, verwenden Sie die rewrite-Direktive:

nginx
rewrite ^/images/(.*)$ https://images.example.com/$1 redirect;
rewrite ^/images/(.*)$ https://images.example.com/$1 permanent;

IIS

In IIS verwenden Sie das <httpRedirect>-Element, um Umleitungen zu konfigurieren.

Umleitungsschleifen

Umleitungsschleifen treten auf, wenn zusätzliche Umleitungen der bereits gefolgten Umleitung folgen. Mit anderen Worten, es gibt eine Schleife, die nie beendet wird und keine Seite wird jemals gefunden.

Meistens ist dies ein Problem des Servers, und wenn der Server es erkennen kann, wird er eine 500 Internal Server Error-Antwort senden. Wenn Sie auf einen solchen Fehler kurz nach der Änderung einer Serverkonfiguration stoßen, handelt es sich wahrscheinlich um eine Umleitungsschleife.

Manchmal wird der Server es nicht erkennen: Eine Umleitungsschleife kann sich über mehrere Server erstrecken, die jeweils kein vollständiges Bild haben. In diesem Fall werden es Browser erkennen und eine Fehlermeldung anzeigen. Firefox zeigt an:

Firefox hat erkannt, dass der Server die Anfrage für diese Adresse in einer Weise umleitet, die niemals endet.

…während Chrome anzeigt:

Diese Webseite hat eine Umleitungsschleife

In beiden Fällen kann der Benutzer nicht viel tun (es sei denn, es tritt eine Beschädigung auf seiner Seite auf, wie ein Cache- oder Cookie-Fehler).

Es ist wichtig, Umleitungsschleifen zu vermeiden, da sie das Benutzererlebnis vollständig zerstören.

Siehe auch