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 zu geben. HTTP hat eine spezielle Art von Antwort, bekannt als HTTP-Umleitung, für diese Operation.
Umleitungen erreichen zahlreiche Ziele:
- Temporäre Umleitungen während Wartungsarbeiten oder Ausfallzeiten der Website
- Permanente Umleitungen, um bestehende Links/Lesezeichen nach einer Änderung der URLs der Website zu erhalten, Fortschrittsseiten beim Hochladen einer Datei etc.
Prinzip
Im HTTP wird eine Umleitung ausgelöst, indem ein Server eine spezielle Umleitungs-Antwort auf eine Anfrage sendet. Umleitungsantworten haben Statuscodes, die mit 3
beginnen, sowie eine Location
-Header, der die URL enthält, auf die umgeleitet werden soll.
Wenn Browser eine Umleitung erhalten, laden sie die neue, im Location
-Header angegebene URL sofort. Abgesehen von dem kleinen Leistungseinbruch durch eine zusätzliche Rundreise bemerken Benutzer die Umleitung selten.
Es gibt mehrere Arten von Umleitungen, die in drei Kategorien sortiert sind:
Permanente Umleitungen
Diese Umleitungen sollen für immer bestehen bleiben. Sie implizieren, dass die ursprüngliche URL nicht mehr verwendet werden sollte und durch die neue ersetzt werden soll. Suchmaschinen-Roboter, RSS-Reader und andere Crawler aktualisieren die ursprüngliche URL für die Ressource.
Code | Text | Methode gehandhabt | Typischer Anwendungsfall |
---|---|---|---|
301 |
Moved Permanently |
GET -Methoden unverändert. Andere können zu GET geändert werden. [1] |
Neustrukturierung einer Website. |
308 |
Permanent Redirect |
Methode und Body nicht geändert. | Neustrukturierung einer Website mit Nicht-GET-Links/Operationen. |
[1] Die Spezifikation beabsichtigte nicht, Methodenänderungen zuzulassen, aber es gibt bestehende Benutzeragenten, die ihre Methode ändern. 308
wurde geschaffen, um die Mehrdeutigkeit des Verhaltens bei der Verwendung von Nicht-GET
-Methoden zu beseitigen.
Temporäre Umleitungen
Manchmal kann nicht auf die angeforderte Ressource an ihrem kanonischen Ort zugegriffen werden, aber sie kann von einem anderen Ort aus zugänglich gemacht 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 | Methode gehandhabt | Typischer Anwendungsfall |
---|---|---|---|
302 |
Found |
GET -Methoden unverändert. Andere können zu GET geändert werden. [2] |
Die Webseite ist aus unvorhergesehenen Gründen vorübergehend nicht verfügbar. |
303 |
See Other |
GET -Methoden unverändert. Andere werden zu GET geändert (Body verloren). |
Wird nach einer PUT - oder einer POST -Operation verwendet, um zu vermeiden, dass ein Auffrischen der Ergebnisseite die Operation erneut auslöst. |
307 |
Temporary Redirect |
Methode und Body nicht geändert | Die Webseite ist aus unvorhergesehenen Gründen vorübergehend nicht verfügbar. Besser als 302 , wenn auf der Website Nicht-GET -Operationen verfügbar sind. |
[2] Die Spezifikation beabsichtigte nicht, Methodenänderungen zuzulassen, aber es gibt bestehende Benutzeragenten, die ihre Methode ändern. 307
wurde geschaffen, 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 (die veraltet war) um, und 300
(Multiple Choices) ist eine manuelle Umleitung: der Body, 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 Body aufgelistet. Maschinenlesbare Auswahlmöglichkeiten sollten als Link -Header mit rel=alternate gesendet werden. |
304 |
Not Modified |
Wird für konditionale Neubewertungen gesendet. Gibt an, dass die zwischengespeicherte Antwort noch frisch ist und verwendet werden kann. |
Alternative Wege zur Angabe von Umleitungen
HTML-Umleitungen
HTTP-Umleitungen sind der beste Weg, Umleitungen zu erstellen, aber manchmal haben Sie keine Kontrolle über den Server. In diesem Fall versuchen Sie es mit einem <meta>
-Element mit seinem http-equiv
-Attribut, das auf Refresh
im <head>
der Seite gesetzt ist. Beim Anzeigen der Seite wird der Browser zur angegebenen URL weitergeleitet.
<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 weiterleitet. Setzen Sie es immer auf 0
, um die Barrierefreiheit zu gewährleisten.
Offensichtlich funktioniert diese Methode nur mit HTML und kann nicht für Bilder oder andere Inhaltstypen verwendet werden.
JavaScript-Umleitungen
Umleitungen in JavaScript werden durchgeführt, indem eine URL-Zeichenkette der window.location
-Eigenschaft zugewiesen wird und die neue Seite geladen wird:
window.location = "https://example.com/";
Wie HTML-Umleitungen kann dies nicht auf alle Ressourcen angewendet werden, und offensichtlich funktioniert dies nur bei Clients, die JavaScript ausführen. Andererseits gibt es mehr Möglichkeiten: Zum Beispiel können Sie die Umleitung nur dann auslösen, wenn bestimmte Bedingungen erfüllt sind.
Reihenfolge der Ausführung
Mit drei Möglichkeiten, Umleitungen auszulösen, können mehrere Wege gleichzeitig verwendet werden. Aber welche wird zuerst ausgeführt?
- HTTP-Umleitungen werden immer zuerst ausgeführt - sie existieren, wenn noch nicht einmal eine Seite übertragen wurde.
- Etwas überraschend ist, dass JavaScript-Umleitungen als nächstes ausgeführt werden, vor HTML-Umleitungen. Dies liegt daran, dass die
<meta>
-Umleitung erfolgt, nachdem die Seite vollständig geladen ist, was nach der Ausführung aller Skripte geschieht. - HTML-Umleitungen (
<meta>
) werden ausgeführt, wenn es keine HTTP-Umleitungen oder JavaScript-Umleitungen gab, die ausgeführt wurden, bevor die Seite geladen wurde. - Wenn es eine JavaScript-Umleitung gibt, die nach dem Laden der Seite erfolgt (zum Beispiel bei einem Klick auf eine Schaltfläche), 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>
-Element-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 kann.
Anwendungsfälle
Es gibt zahlreiche Anwendungsfälle für Umleitungen, aber da die Leistung mit jeder Umleitung beeinträchtigt wird, sollte deren Verwendung auf ein Minimum beschränkt werden.
Domain-Alias
Idealerweise gibt es für jede Ressource einen Ort und daher eine URL. Aber es gibt Gründe für alternative Namen für eine Ressource:
- Erweiterung der Reichweite Ihrer Website
-
Ein häufiger Fall ist, wenn eine Site unter
www.example.com
liegt, der Zugriff aber auch überexample.com
funktionieren sollte. Umleitungen vonexample.com
nachwww.example.com
werden daher eingerichtet. Sie könnten auch von gängigen Synonymen oder häufigen Tippfehlern Ihrer Domains umleiten. - Umzug auf eine neue Domain
-
Beispielsweise wurde Ihre Firma umbenannt, aber Sie möchten, dass bestehende Links oder Lesezeichen Sie unter dem neuen Namen finden.
- Erzwingung von HTTPS
-
Anfragen an die
http://
-Version Ihrer Website werden zurhttps://
-Version Ihrer Website umgeleitet.
Links am Leben erhalten
Wenn Sie Websites neu strukturieren, ändern sich die URLs. Auch wenn Sie die Links Ihrer Website aktualisieren, um sie mit den neuen URLs übereinstimmen zu lassen, haben Sie keine Kontrolle über die von externen Ressourcen verwendeten URLs.
Sie möchten diese Links nicht brechen, da sie wertvolle Benutzer bringen und Ihrem SEO helfen, sodass Sie Umleitungen von den alten URLs zu den neuen einrichten.
Hinweis: Diese Technik funktioniert auch für interne Links, versuchen Sie jedoch, 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 reparieren.
Temporäre Antworten auf unsichere Anfragen
Unsichere Anfragen ändern den Status des Servers und der Nutzer 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 durch Drücken der Aktualisieren-Schaltfläche die Anfrage erneut gesendet (möglicherweise nach einer Bestätigungsnachricht).
In diesem Fall kann der Server eine 303
(See Other)-Antwort an eine URL senden, die die richtigen Informationen enthalten wird. Wenn die Aktualisieren-Schaltfläche gedrückt wird, wird nur diese Seite angezeigt, ohne die unsicheren Anfragen erneut abzuspielen.
Temporäre Antworten auf langwierige Anfragen
Einige Anfragen benötigen möglicherweise mehr Zeit auf dem Server, wie DELETE
-Anfragen, die für eine spätere Verarbeitung 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 möglicherweise über ihren Fortschritt informiert oder ihre Stornierung ermöglicht.
Konfigurieren von Umleitungen auf gängigen Servern
Apache
Umleitungen können entweder in der Server-Konfigurationsdatei oder in der .htaccess
jeder Verzeichnisebene eingestellt 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 darunterliegenden Dateien oder Verzeichnisse (https://example.com/some-page
wird auf https://www.example.com/some-page
umgeleitet).
RedirectMatch
tut 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 Schlüsselwort permanent
) 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 etwas komplexer.
Nginx
In Nginx erstellen Sie einen speziellen 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 zusätzlich zu einer bereits verfolgten Umleitung weitere Umleitungen folgen. Mit anderen Worten existiert eine Schleife, die nie abgeschlossen wird und niemals eine Seite gefunden wird.
Meistens ist dies ein Serverproblem, und wenn der Server es erkennen kann, sendet er einen 500
Internal Server Error
zurück. Wenn Sie auf einen solchen Fehler kurz nach der Änderung einer Serverkonfiguration stoßen, handelt es sich wahrscheinlich um eine Umleitungsschleife.
Manchmal erkennt der Server es nicht: Eine Umleitungsschleife kann über mehrere Server hinweg gehen, die jeweils nicht das Gesamtbild haben. In diesem Fall erkennen es Browser und zeigen eine Fehlermeldung an. Firefox zeigt:
Firefox hat festgestellt, dass der Server die Anfrage für diese Adresse auf eine Weise umleitet, die niemals endet.
...während Chrome anzeigt:
Diese Webseite hat eine Umleitungsschleife
In beiden Fällen kann der Benutzer nicht viel unternehmen (es sei denn, eine Korrumpierung tritt auf seiner Seite auf, wie ein Missverhältnis zwischen Cache oder Cookies).
Es ist wichtig, Umleitungsschleifen zu vermeiden, da sie das Benutzererlebnis vollständig beeinträchtigen.
Siehe auch
- 3XX-Umleitungs-Antwortstatuscodes
Location
-Headerwindow.location
-Eigenschaft für Umleitungen in JavaScript