Weiterleitungen in HTTP
URL-Weiterleitung, 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 für diese Operation eine spezielle Art von Antwort, die als HTTP-Weiterleitung bezeichnet wird.
Weiterleitungen erfüllen zahlreiche Ziele:
- Temporäre Weiterleitungen während der Website-Wartung oder Ausfallzeiten
- Permanente Weiterleitungen zur Beibehaltung bestehender Links/Lesezeichen nach Änderung der URLs der Website, Fortschrittsseiten beim Hochladen einer Datei usw.
Prinzip
Im HTTP wird die Weiterleitung durch einen speziellen Redirect-Antwort des Servers auf eine Anfrage ausgelöst. Redirect-Antworten haben Statuscodes, die mit 3
beginnen, und einen Location
-Header, der die URL enthält, zu der weitergeleitet werden soll.
Wenn Browser eine Weiterleitung erhalten, laden sie sofort die neue URL, die im Location
-Header angegeben ist. Abgesehen von dem geringen Leistungseinbußen durch eine zusätzliche Runde bemerken Benutzer die Weiterleitung selten.
Es gibt mehrere Arten von Weiterleitungen, die in drei Kategorien unterteilt sind:
Permanente Weiterleitungen
Diese Weiterleitungen sollen für immer bestehen bleiben. Sie implizieren, dass die ursprüngliche URL nicht mehr verwendet und durch die neue ersetzt werden sollte. Suchmaschinen-Roboter, RSS-Reader und andere Crawler werden die ursprüngliche URL für die Ressource aktualisieren.
Code | Text | Handhabung der Methode | Typische Anwendungsfälle |
---|---|---|---|
301 |
Moved Permanently |
GET -Methoden unverändert. Andere können geändert werden oder auch nicht in GET . [1] |
Neuordnung einer Website. |
308 |
Permanent Redirect |
Methode und Inhalt nicht geändert. | Neuordnung einer Website, mit nicht-GET-Links/Operationen. |
[1] Die Spezifikation beabsichtigte nicht, Methodenänderungen zu 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 Weiterleitungen
Manchmal kann auf die angeforderte Ressource nicht an ihrem kanonischen Speicherort zugegriffen werden, aber sie kann an einem anderen Ort zugänglich gemacht werden. In diesem Fall kann eine temporäre Weiterleitung verwendet werden.
Suchmaschinen-Roboter und andere Crawler merken sich die neue, temporäre URL nicht. Temporäre Weiterleitungen werden auch beim Erstellen, Aktualisieren oder Löschen von Ressourcen verwendet, um temporäre Fortschrittsseiten anzuzeigen.
Code | Text | Handhabung der Methode | Typische Anwendungsfälle |
---|---|---|---|
302 |
Found |
GET -Methoden unverändert. Andere können geändert werden oder auch nicht in GET . [2] |
Die Webseite ist vorübergehend aus unvorhergesehenen Gründen nicht verfügbar. |
303 |
See Other |
GET -Methoden unverändert. Andere werden in GET geändert (Inhalt verloren). |
Wird verwendet, um nach einem PUT oder einem POST weiterzuleiten, damit das Aktualisieren der Ergebnisseite nicht die Operation 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 nicht-GET -Operationen auf der Seite verfügbar sind. |
[2] Die Spezifikation beabsichtigte nicht, Methodenänderungen zu 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.
Besondere Weiterleitungen
304
(Not Modified) leitet eine Seite zur lokal zwischengespeicherten Kopie (die veraltet war) um, und 300
(Multiple Choices) ist eine manuelle Weiterleitung: der Inhalt, der vom Browser als Webseite präsentiert wird, listet die möglichen Weiterleitungen auf, und der Benutzer klickt auf eine, um sie auszuwählen.
Code | Text | Typische Anwendungsfälle |
---|---|---|
300 |
Multiple Choices |
Nicht viele: die Auswahlmöglichkeiten werden in einer HTML-Seite im Inhalt aufgelistet. Maschinengelesene Auswahlmöglichkeiten werden empfohlen, als Link -Header mit rel=alternate zu senden. |
304 |
Not Modified |
Wird für revalidierte bedingte Anfragen gesendet. Gibt an, dass die zwischengespeicherte Antwort noch aktuell ist und verwendet werden kann. |
Alternative Möglichkeit zur Spezifizierung von Weiterleitungen
HTML-Weiterleitungen
HTTP-Weiterleitungen sind der beste Weg, um Weiterleitungen zu erstellen, aber manchmal haben Sie keine Kontrolle über den Server. In diesem Fall versuchen Sie ein <meta>
-Element mit dem http-equiv
-Attribut auf Refresh
im <head>
der Seite. Wenn die Seite angezeigt wird, 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 sollte, bevor zur angegebenen URL weitergeleitet wird. Stellen Sie es immer auf 0
für Barrierefreiheit.
Offensichtlich funktioniert diese Methode nur mit HTML und kann nicht für Bilder oder andere Arten von Inhalten verwendet werden.
JavaScript-Weiterleitungen
Weiterleitungen in JavaScript werden durchgeführt, indem ein URL-String auf die window.location
-Eigenschaft gesetzt wird, wodurch die neue Seite geladen wird:
window.location = "https://example.com/";
Wie HTML-Weiterleitungen funktionieren diese nicht bei allen Ressourcen, und offensichtlich wird dies nur bei Clients funktionieren, die JavaScript ausführen. Andererseits bieten sie mehr Möglichkeiten: Sie können die Weiterleitung beispielsweise nur dann auslösen, wenn bestimmte Bedingungen erfüllt sind.
Reihenfolge der Ausführung
Mit drei Möglichkeiten zur Auslösung von Weiterleitungen können mehrere Methoden gleichzeitig verwendet werden. Aber welche wird zuerst angewendet?
- HTTP-Weiterleitungen werden immer zuerst ausgeführt – sie existieren, wenn es noch keine übertragene Seite gibt.
- Etwas überraschend wird die JavaScript-Weiterleitung als nächstes ausgeführt, vor HTML-Weiterleitungen. Dies liegt daran, dass die
<meta>
-Weiterleitung stattfindet, nachdem die Seite vollständig geladen wurde, also nachdem alle Skripte ausgeführt wurden. - HTML-Weiterleitungen (
<meta>
) werden ausgeführt, wenn es keine HTTP-Weiterleitungen oder JavaScript-Weiterleitungen gab, die ausgeführt wurden, bevor die Seite geladen wurde. - Wenn es eine JavaScript-Weiterleitung gibt, die nach dem Laden der Seite stattfindet (zum Beispiel bei einem Klick auf einen Button), wird sie als letzte ausgeführt, wenn die Seite nicht bereits durch die vorherigen Methoden weitergeleitet wurde.
Wann immer möglich, verwenden Sie HTTP-Weiterleitungen und fügen Sie keine <meta>
-Element-Weiterleitungen hinzu. Wenn jemand die HTTP-Weiterleitungen ändert, aber vergisst, die HTML-Weiterleitungen zu ändern, sind die Weiterleitungen nicht mehr identisch, was eine Endlosschleife oder andere Alpträume verursachen könnte.
Anwendungsfälle
Es gibt zahlreiche Anwendungsfälle für Weiterleitungen, aber da die Leistung mit jeder Weiterleitung beeinträchtigt wird, sollte ihre Verwendung auf ein Minimum beschränkt werden.
Domains-Aliasing
Idealerweise gibt es für jede Ressource einen Standort und somit eine URL. Es gibt jedoch Gründe für alternative Namen für eine Ressource:
- Erweiterung der Reichweite Ihrer Website
-
Ein häufiges Beispiel ist, wenn eine Website unter
www.example.com
residiert, aber auch der Zugriff vonexample.com
funktionieren sollte. Weiterleitungen vonexample.com
zuwww.example.com
werden daher eingerichtet. Sie können auch von gebräuchlichen Synonymen oder häufigen Tippfehlern Ihrer Domains weiterleiten. - Umzug zu einer neuen Domain
-
Zum Beispiel hat Ihr Unternehmen einen neuen Namen, Sie möchten jedoch, dass bestehende Links oder Lesezeichen Sie noch unter dem neuen Namen finden.
- Erzwingen von HTTPS
-
Anfragen an die
http://
-Version Ihrer Website werden zurhttps://
-Version Ihrer Website weitergeleitet.
Links am Leben halten
Beim Restrukturieren von Websites ä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 Ressourcen verwendeten URLs.
Sie möchten diese Links nicht unterbrechen, da sie wertvolle Benutzer bringen und Ihr SEO unterstützen, sodass Sie Weiterleitungen von den alten URLs zu den neuen einrichten.
Hinweis: Diese Technik funktioniert auch für interne Links, versuchen Sie jedoch, interne Weiterleitungen zu vermeiden. Eine Weiterleitung hat erhebliche Leistungskosten (da eine zusätzliche HTTP-Anfrage erfolgt). Wenn Sie es vermeiden können, indem Sie interne Links korrigieren, sollten Sie diese Links stattdessen reparieren.
Temporäre Antworten auf unsichere Anfragen
Unsichere Anfragen verändern den Zustand des Servers, und der Benutzer sollte sie nicht unbeabsichtigt erneut senden.
Normalerweise 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 für eine URL zurücksenden, 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 abzuspielen.
Temporäre Antworten auf lange Anfragen
Einige Anfragen benötigen möglicherweise mehr Zeit auf dem Server, z. B. DELETE
-Anfragen, die für eine spätere Verarbeitung geplant sind. In diesem Fall ist die Antwort eine 303
(See Other)-Weiterleitung, die zu einer Seite führt, die angibt, dass die Aktion geplant wurde, und möglicherweise über ihren Fortschritt informiert oder deren Abbruch ermöglicht.
Konfiguration von Weiterleitungen auf gängigen Servern
Apache
Weiterleitungen können entweder in der Server-Konfigurationsdatei oder in der .htaccess
jeder Verzeichnisebene eingerichtet werden.
Das mod_alias
-Modul hat Konfigurationen für Redirect
und RedirectMatch
, die standardmäßig 302
-Weiterleitungen einrichten:
<VirtualHost *:443>
ServerName example.com
Redirect / https://www.example.com
</VirtualHost>
Die URL https://example.com/
wird zu https://www.example.com/
weitergeleitet, ebenso alle darunter befindlichen Dateien oder Verzeichnisse (https://example.com/some-page
wird zu https://www.example.com/some-page
weitergeleitet).
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 auf eine andere Domain umgeleitet.
Falls Sie keine temporäre Weiterleitung wünschen, kann ein zusätzliches 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 auch Weiterleitungen erstellen. Es ist flexibler, aber etwas komplexer.
Nginx
In Nginx erstellen Sie einen spezifischen Serverblock für den Inhalt, den Sie weiterleiten möchten:
server {
listen 80;
server_name example.com;
return 301 $scheme://www.example.com$request_uri;
}
Um eine Weiterleitung auf ein Verzeichnis oder nur bestimmte Seiten anzuwenden, verwenden Sie die rewrite
-Richtlinie:
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 Weiterleitungen zu konfigurieren.
Weiterleitungsschleifen
Weiterleitungsschleifen treten auf, wenn zusätzliche Weiterleitungen derjenigen folgen, die bereits gefolgt wurde. Mit anderen Worten, es gibt eine Schleife, die niemals beendet wird und keine Seite jemals gefunden wird.
Meistens handelt es sich dabei um ein Serverproblem, und wenn der Server es erkennen kann, sendet er eine 500
Internal Server Error
. Wenn Sie nach dem Ändern einer Serverkonfiguration schnell auf einen solchen Fehler stoßen, handelt es sich wahrscheinlich um eine Weiterleitungsschleife.
Manchmal erkennt der Server es nicht: Eine Weiterleitungsschleife kann sich über mehrere Server erstrecken, die nicht das gesamte Bild haben. In diesem Fall erkennen Browser es und zeigen eine Fehlermeldung an. Firefox zeigt an:
Firefox hat erkannt, dass der Server die Anfrage für diese Adresse auf eine Weise umleitet, die niemals endet.
…während Chrome anzeigt:
Diese Webseite hat eine Weiterleitungsschleife
In beiden Fällen kann der Benutzer nicht viel tun (es sei denn, es liegt eine Beschädigung auf seiner Seite vor, wie eine Cache- oder Cookie-Diskrepanz).
Es ist wichtig, Weiterleitungsschleifen zu vermeiden, da sie das Benutzererlebnis vollständig zerstören.
Siehe auch
- 3XX-Weiterleitungen Statusantworten
Location
-Headerwindow.location
-Eigenschaft für Weiterleitungen mit JavaScript