Umleitungen im HTTP
URL-Umleitung, auch bekannt als URL-Weiterleitung, ist eine Technik, um einer Seite, einem Formular, einer ganzen Website oder einer Webanwendung mehr als eine URL-Adresse zuzuweisen. HTTP hat eine spezielle Art von Antwort, die als HTTP-Umleitung bezeichnet wird, für diesen Vorgang.
Umleitungen erfüllen zahlreiche Ziele:
- Temporäre Umleitungen während der Wartung oder bei Ausfallzeiten der Website
- Permanente Umleitungen, um bestehende Links/Lesezeichen nach einer Änderung der URLs der Seite zu erhalten, Fortschrittsseiten beim Hochladen einer Datei usw.
Prinzip
Im HTTP wird eine Umleitung durch einen Server ausgelöst, der eine spezielle Umleitungs-Antwort auf eine Anfrage sendet. Umleitungsantworten haben Statuscodes, die mit 3
beginnen, und ein 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 bereitgestellt wird. Abgesehen von dem kleinen Leistungseinbruch durch eine zusätzliche Runde-Trips bemerken Benutzer die Umleitung selten.
Es gibt mehrere Arten von Umleitungen, die in drei Kategorien unterteilt sind:
Permanente Umleitungen
Diese Umleitungen sollen dauerhaft sein. Sie bedeuten, dass die ursprüngliche URL nicht mehr verwendet werden sollte und durch die neue ersetzt werden muss. Suchmaschinenroboter, RSS-Leser und andere Crawler werden die ursprüngliche URL für die Ressource aktualisieren.
Code | Text | Umgang mit Methoden | Typischer Anwendungsfall |
---|---|---|---|
301 |
Moved Permanently |
GET -Methoden bleiben unverändert. Andere können möglicherweise in GET geändert werden. [1] |
Neuorganisation einer Website. |
308 |
Permanent Redirect |
Methode und Inhalt bleiben unverändert. | Neuorganisation einer Website mit nicht-GET-Links/Operationen. |
[1] Die Spezifikation wollte keine Methodenänderungen erlauben, aber es gibt bestehende Benutzeragenten, die ihre Methode ändern. 308
wurde erstellt, um die Mehrdeutigkeit des Verhaltens bei der Verwendung von nicht-GET
-Methoden zu beseitigen.
Temporäre Umleitungen
Manchmal kann die angeforderte Ressource nicht von ihrem kanonischen Ort aus aufgerufen werden, jedoch an einem anderen Ort. In diesem Fall kann eine temporäre Umleitung verwendet werden.
Suchmaschinenroboter und andere Crawler speichern die neue, temporäre URL nicht. Temporäre Umleitungen werden auch verwendet, wenn Ressourcen erstellt, aktualisiert oder gelöscht werden, um vorübergehende Fortschrittsseiten anzuzeigen.
Code | Text | Umgang mit Methoden | Typischer Anwendungsfall |
---|---|---|---|
302 |
Found |
GET -Methoden bleiben unverändert. Andere können möglicherweise in 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 zu GET geändert (Inhalt verloren). |
Wird verwendet, um nach einem PUT oder POST umzuleiten, damit das Aktualisieren der Ergebnisseite nicht die Operation erneut auslöst. |
307 |
Temporary Redirect |
Methode und Inhalt bleiben unverändert. | Die Webseite ist vorübergehend aus unvorhergesehenen Gründen nicht verfügbar. Besser als 302 , wenn nicht-GET -Operationen verfügbar sind. |
[2] Die Spezifikation wollte keine Methodenänderungen erlauben, aber es gibt bestehende Benutzeragenten, die ihre Methode ändern. 307
wurde erstellt, um die Mehrdeutigkeit des Verhaltens bei der Verwendung von nicht-GET
-Methoden zu beseitigen.
Spezielle Umleitungen
304
(Not Modified) leitet eine Seite zur lokal zwischengespeicherten Kopie um (die veraltet war), 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 aufgelistet. Maschinenlesbare Auswahlmöglichkeiten werden empfohlen, als Link -Header mit rel=alternate gesendet zu werden. |
304 |
Not Modified |
Wird für neuvalidierte bedingte Anfragen gesendet. Gibt an, dass die zwischengespeicherte Antwort noch aktuell ist und verwendet werden kann. |
Alternative Möglichkeiten zur Angabe von Umleitungen
HTML-Umleitungen
HTTP-Umleitungen sind die beste Methode, um Umleitungen zu erstellen, aber manchmal haben Sie keine Kontrolle über den Server. In diesem Fall versuchen Sie es mit einem <meta>
-Element mit dessen http-equiv
-Attribut, das im <head>
der Seite auf Refresh
gesetzt ist. Beim Anzeigen der Seite wird der Browser zur angegebenen URL gehen.
<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 zur angegebenen URL umgeleitet wird. Setzen Sie es immer auf 0
für Barrierefreiheitseinhaltung.
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 ausgeführt, indem ein URL-String in die window.location
-Eigenschaft gesetzt wird, wodurch die neue Seite geladen wird:
window.location = "https://example.com/";
Wie HTML-Umleitungen funktioniert dies nicht bei allen Ressourcen, und offensichtlich funktioniert es nur auf Clients, die JavaScript ausführen. Auf der anderen Seite gibt es mehr Möglichkeiten: Zum Beispiel können Sie die Umleitung nur auslösen, wenn bestimmte Bedingungen erfüllt sind.
Reihenfolge der Priorität
Mit drei Möglichkeiten, Umleitungen auszulösen, können mehrere gleichzeitig verwendet werden. Aber welche wird zuerst angewendet?
- HTTP-Umleitungen werden immer zuerst ausgeführt – es gibt sie, wenn noch nicht einmal eine übertragene Seite vorhanden ist.
- Überraschenderweise werden JavaScript-Umleitungen als nächstes ausgeführt, vor HTML-Umleitungen. Dies liegt daran, dass die
<meta>
-Umleitung erfolgt, nachdem die Seite vollständig geladen wurde, was nach allen ausgeführten Skripten ist. - HTML-Umleitungen (
<meta>
) werden ausgeführt, wenn es vorher keine HTTP-Umleitungen oder JavaScript-Umleitungen gab. - Wenn es eine JavaScript-Umleitung gibt, die nach dem Laden der Seite erfolgt (zum Beispiel beim Klicken auf einen Button), wird sie zuletzt ausgeführt, wenn die Seite nicht bereits durch die vorherigen Methoden umgeleitet wurde.
Wenn möglich, verwenden Sie HTTP-Umleitungen und fügen Sie keine <meta>
-Elementumleitungen hinzu. Wenn jemand die HTTP-Umleitungen ändert, aber vergisst, die HTML-Umleitungen zu ändern, werden die Umleitungen nicht mehr identisch sein, was eine Endlosschleife oder andere Albträume verursachen könnte.
Anwendungsfälle
Es gibt zahlreiche Anwendungsfälle für Umleitungen, aber da die Leistung bei jeder Umleitung beeinträchtigt wird, sollte ihr Einsatz auf ein Minimum beschränkt werden.
Domain-Alias
Idealerweise gibt es für jede Ressource einen Standort und damit eine URL. Es gibt jedoch Gründe für alternative Namen für eine Ressource:
- Erweiterung der Reichweite Ihrer Website
-
Ein häufiges Szenario ist, wenn eine Website unter
www.example.com
liegt, das Zugreifen vonexample.com
jedoch ebenfalls funktionieren soll. Umleitungen vonexample.com
zuwww.example.com
werden daher eingerichtet. Sie könnten auch von häufig verwendeten Synonymen oder häufigen Tippfehlern Ihrer Domains umleiten. - Umzug auf eine neue Domain
-
Zum Beispiel hat Ihr Unternehmen einen neuen Namen erhalten, aber Sie möchten, dass bestehende Links oder Lesezeichen weiterhin unter dem neuen Namen zu finden sind.
- Erzwingen von HTTPS
-
Anfragen an die
http://
-Version Ihrer Website werden zurhttps://
-Version umgeleitet.
Links am Leben halten
Wenn Sie Websites neu strukturieren, ändern sich URLs. Auch wenn Sie die Links Ihrer Website aktualisieren, um den neuen URLs zu entsprechen, haben Sie keine Kontrolle über die von externen Quellen verwendeten URLs.
Sie möchten diese Links nicht brechen, da sie wertvolle Nutzer bringen und Ihr SEO unterstützen, daher 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 unbeabsichtigt 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, löst ein einfaches Drücken des Aktualisierungsbuttons die Anfrage erneut aus (möglicherweise nach einer Bestätigungsmeldung).
In diesem Fall kann der Server eine 303
(See Other)-Antwort für eine URL senden, die die richtigen Informationen enthält. Wenn der Aktualisierungsbutton gedrückt wird, wird nur diese Seite erneut angezeigt, ohne die unsicheren Anfragen erneut auszuführen.
Temporäre Antworten auf lange Anfragen
Einige Anfragen benötigen möglicherweise mehr Zeit auf dem Server, beispielsweise DELETE
-Anfragen, die für späteres Processing geplant sind. In diesem Fall ist die Antwort eine 303
(See Other)-Umleitung, die auf eine Seite verweist, die angibt, dass die Aktion geplant wurde und schließlich über ihren Fortschritt informiert oder das Abbrechen ermöglicht.
Konfigurieren von Umleitungen in gängigen Servern
Apache
Umleitungen können entweder in der Serverkonfigurationsdatei oder in der .htaccess
jeder Verzeichnisebene eingerichtet werden.
Das mod_alias
-Modul verfügt über Redirect
- und RedirectMatch
-Direktiven, die standardmäßig 302
-Umleitungen einrichten:
<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 darunter (https://example.com/some-page
wird zu https://www.example.com/some-page
umgeleitet).
RedirectMatch
macht dasselbe, verwendet jedoch einen regulären Ausdruck, um eine Sammlung betroffener URLs zu definieren:
RedirectMatch ^/images/(.*)$ https://images.example.com/$1
Alle Dokumente im images/
-Verzeichnis werden zu einer anderen Domain umgeleitet.
Wenn Sie keine temporäre Umleitung wünschen, kann ein zusätzlicher Parameter (entweder der zu verwendende HTTP-Statuscode oder das permanent
-Schlüsselwort) verwendet werden, um eine andere Umleitung einzurichten:
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 auch etwas komplexer.
Nginx
In Nginx erstellen Sie einen spezifischen Serverblock für den Inhalt, den Sie umleiten möchten:
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:
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 entstehen, wenn weiteren Umleitungen gefolgt wird, nachdem bereits einer Umleitung gefolgt wurde. Mit anderen Worten, es gibt eine Schleife, die niemals beendet wird und keine Seite wird jemals gefunden.
Meistens handelt es sich um ein Serverproblem, und wenn der Server es erkennen kann, sendet er eine 500
Internal Server Error
-Antwort zurück. Wenn Sie kurz nach dem Ändern einer Serverkonfiguration auf einen solchen Fehler stoßen, handelt es sich wahrscheinlich um eine Umleitungsschleife.
Manchmal erkennt der Server es nicht: Eine Umleitungsschleife kann sich über mehrere Server erstrecken, die nichts vom gesamten Bild wissen. In diesem Fall erkennen die Browser es und zeigen eine Fehlermeldung an. Firefox zeigt:
Firefox hat erkannt, dass der Server die Anfrage für diese Adresse auf eine Weise umleitet, die niemals enden wird.
...während Chrome folgendes anzeigt:
Diese Webseite hat eine Umleitungsschleife
In beiden Fällen kann der Benutzer wenig tun (es sei denn, es tritt eine Beschädigung auf, wie z.B. ein Cache- oder Cookie-Mismatch).
Es ist wichtig, Umleitungsschleifen zu vermeiden, da sie das Benutzererlebnis vollständig beeinträchtigen.
Siehe auch
- 3XX Umleitungs Antwortstatus
Location
-Headerwindow.location
-Eigenschaft für Umleitungen mithilfe von JavaScript