Es ist erwähnenswert, dass die Spezifikation auch 303- und 307-Statuscodes für differenziertere temporäre Weiterleitungen enthält.
Patrick McElhaney
303 und 307 werden nicht mehr wirklich benötigt. 303 sollte angeben, dass die neue URL verwandt, aber nicht gleichwertig ist, und sollte mit GET geladen werden, auch wenn die aktuelle Anforderung POST war, aber Browser tun dies trotzdem mit 302. 307 sollte explizit angeben, dass die Umleitung temporär ist, im Gegensatz zu 302, bei dem nicht angegeben wurde, ob sie temporär ist, aber Browser und Crawler behandeln 302 trotzdem als temporär.
Thomasrutter
Antworten:
569
Status 301 bedeutet, dass die Ressource (Seite) dauerhaft an einen neuen Speicherort verschoben wird. Der Client / Browser sollte nicht versuchen, den ursprünglichen Speicherort anzufordern, sondern von nun an den neuen Speicherort verwenden.
Status 302 bedeutet, dass sich die Ressource vorübergehend an einer anderen Stelle befindet und der Client / Browser weiterhin die ursprüngliche URL anfordern sollte.
Vielen Dank. Bedeutet dies, dass der Client bei Verwendung einer (permanenten) 301-Umleitung entscheiden kann, den alten Speicherort nie wieder abzurufen und stattdessen immer direkt die neue URL zu verwenden?
Flybywire
18
Genau! In der Tat sollte der Kunde gemäß den Spezifikationen immer an den neuen Standort gehen.
Philippe Leybaert
7
Aber wie wirkt sich das in einem Browser aus? Schreiben Sie beispielsweise den Verlauf in der Zurück-Schaltfläche neu, um zu vermeiden, dass Sie in einem 301 zum falschen zurückkehren? Ein Lesezeichen auf 301 stillschweigend ändern, wenn Sie auf ein altes klicken?
Xavi Montero
9
@ XaviMontero Die meisten modernen Browser zwischenspeichern 301s und werden bis zu 6 Monate lang nicht die Originalquelle anfordern
Jon
34
Trick zum Erinnern HTTP-Statuscodes 301-> Perm und 302-> Temp Redirect Zwei beginnen mit T, genauso wie temporäre Starts mit T.
ScottCate
108
Wenn eine Suchmaschinenspinne den 301-Statuscode im Antwortheader einer Webseite findet, versteht sie, dass diese Webseite nicht mehr existiert. Sie sucht nach dem Standortheader als Antwort, wählt die neue URL aus und ersetzt die indizierte URL durch die neue und überträgt auch den Pagerank .
Die Suchmaschine aktualisiert also alle indizierten URLs, die nicht mehr existieren (301 gefunden), mit der neuen URL. Dadurch bleibt Ihr alter Webseitenverkehr erhalten, der Pagerank wird auf die neue umgeleitet (Sie verlieren nicht den Verkehr der alten Webseite).
Browser: Wenn ein Browser den Statuscode 301 findet, speichert er die Zuordnung der alten URL zur neuen URL zwischen. Der Client / Browser versucht nicht, den ursprünglichen Speicherort anzufordern, sondern verwendet ab sofort den neuen Speicherort, es sei denn, der Cache wird geleert.
Wenn eine Suchmaschinenspinne den Status 302 für eine Webseite findet, wird sie nur vorübergehend an den neuen Speicherort umgeleitet und beide Seiten crawlen. Die alte Webseiten-URL ist noch in der Suchmaschinendatenbank vorhanden und versucht immer, den alten Speicherort anzufordern und zu crawlen. Der Client / Browser versucht weiterhin, den ursprünglichen Speicherort anzufordern.
Meistens ist 301 vs 302 wichtig für die Indizierung in Suchmaschinen, da ihre Crawler dies berücksichtigen und den PageRank übertragen, wenn sie 301 verwenden.
301 ist, dass der angeforderten Ressource eine neue permanente URI zugewiesen wurde und alle zukünftigen Verweise auf diese Ressource unter Verwendung einer der zurückgegebenen URIs erfolgen sollten.
302 ist, dass sich die angeforderte Ressource vorübergehend unter einem anderen URI befindet.
Da die Umleitung gelegentlich geändert werden kann, sollte der Client den Anforderungs-URI weiterhin für zukünftige Anforderungen verwenden.
Diese Antwort kann nur zwischengespeichert werden, wenn dies durch ein Cache-Control- oder Expires-Headerfeld angezeigt wird.
301 macht also Sinn, aber es fällt mir schwer, ein gutes Beispiel für 302 zu finden .
Bob Stein
4
@ BobStein-VisiBone zum Beispiel der 302-Umleitung: Erstellen Sie eine Datei old.php mit dem Code <?php header("location: http://example.com/new.php"); ?>und der Datei new.php - <?php echo 'I am new'; ?>und gehen Sie zum Link . Dort wird der Text "Ich bin neu" umgeleitet und angezeigt. Ersetzen Sie dann den Code in old.php durch <?php echo 'I am old'; ?>und gehen Sie auch zum Link . Sie sehen den Text "Ich bin alt". Wenn Sie die 301-Umleitung in old.php durchgeführt haben, hätten Sie den Text "Ich bin neu" auch nach den Änderungen im Code von old.php gesehen.
Apostel
2
@ BobStein-VisiBone Ich habe eine Seite, die veraltet ist und nicht angezeigt werden kann. Wir müssen eine neue Seite erstellen, sind aber für eine Weile nicht bereit. Wir verwenden eine vorübergehende Weiterleitung zu einer vorhandenen Seite, die uns für Besucher nützlich ist. Sobald die neue Seite erstellt wurde, verwenden wir eine permanente Weiterleitung zu dieser Seite.
EddieC
4
302 ist nützlich, wenn Ihre Ziel-URL vom Status abhängt.
Brian
7
Ich jetzt ist es eine Weile her, aber hier ist ein gutes Beispiel. Webcomics haben normalerweise eine URL, die zum neuesten Comic führt. Wenn dies der Fall ist webcomic.com/latestund webcomic.com/some-comic-titlemit einem 301 umgeleitet wird, leitet der Browser immer zu "some-comic-title" um. Selbst wenn der nächste Comic veröffentlicht wurde und "neueste" jetzt zu "einem anderen Comic-Titel" weiterleitet ... Hier wäre ein 302 besser.
Hsan
17
301 Weiterleitungen werden unbegrenzt zwischengespeichert (zumindest von einigen Browsern).
Wenn Sie also eine 301 einrichten und diese Seite besuchen, werden Sie nicht nur umgeleitet, sondern diese Umleitung wird zwischengespeichert.
Wenn Sie diese Seite erneut besuchen, macht sich Ihr Browser * nicht einmal die Mühe, diese URL anzufordern, sondern geht nur zum zwischengespeicherten Umleitungsziel.
Die einzige Möglichkeit, eine 301 für einen Besucher mit dieser Umleitung im Cache rückgängig zu machen, besteht darin, zur ursprünglichen URL ** zurückzukehren. In diesem Fall bemerkt der Browser die Schleife und fordert schließlich die eingegebene URL wirklich an.
Offensichtlich ist dies keine Option, wenn Sie sich für Facebook oder eine andere Ressource entschieden haben, die Sie nicht vollständig unter Kontrolle haben.
Leider bieten viele Hosting-Anbieter in ihrer Admin-Oberfläche eine Funktion namens "Umleitung" an, die eine 301-Umleitung durchführt. Wenn Sie dies verwenden, um Ihre Domain vorübergehend als kommende Seite auf Facebook umzuleiten, sind Sie im Grunde genommen durcheinander.
* mindestens Chrome und Firefox, je nachdem, wie lange Browser HTTP 301s zwischenspeichern? . Habe es gerade mit Chrome 45 versucht. Bearbeiten: Safari 7.0.6 unter Mac wird auch zwischengespeichert, ein Neustart des Browsers hat nicht geholfen (Link sagt, dass es unter Safari 5 unter Windows hilft.)
** Ich habe Javascript ausprobiert window.location = '', da dies die Lösung ist, die in den meisten Fällen angewendet werden kann - es funktioniert nicht. Dies führt zu einer unentdeckten Endlosschleife. PHP unterbricht header('Location: new.url')jedoch die Schleife
Fazit : Verwenden Sie 301s nur, wenn Sie absolut sicher sind, dass Sie diese URL nie wieder verwenden werden. Normalerweise nie im Root-Verzeichnis (example.com/)
Es ist definitiv kein "Problem"; es ist nur so, wie es funktionieren soll. Das Umleiten von HTTP zu HTTPS, das Umleiten verlassener Websites zu einer neuen usw. sind einige der üblichen Verwendungen von 301.
Antworten:
Status 301 bedeutet, dass die Ressource (Seite) dauerhaft an einen neuen Speicherort verschoben wird. Der Client / Browser sollte nicht versuchen, den ursprünglichen Speicherort anzufordern, sondern von nun an den neuen Speicherort verwenden.
Status 302 bedeutet, dass sich die Ressource vorübergehend an einer anderen Stelle befindet und der Client / Browser weiterhin die ursprüngliche URL anfordern sollte.
quelle
Wenn eine Suchmaschinenspinne den 301-Statuscode im Antwortheader einer Webseite findet, versteht sie, dass diese Webseite nicht mehr existiert. Sie sucht nach dem Standortheader als Antwort, wählt die neue URL aus und ersetzt die indizierte URL durch die neue und überträgt auch den Pagerank .
Die Suchmaschine aktualisiert also alle indizierten URLs, die nicht mehr existieren (301 gefunden), mit der neuen URL. Dadurch bleibt Ihr alter Webseitenverkehr erhalten, der Pagerank wird auf die neue umgeleitet (Sie verlieren nicht den Verkehr der alten Webseite).
Browser: Wenn ein Browser den Statuscode 301 findet, speichert er die Zuordnung der alten URL zur neuen URL zwischen. Der Client / Browser versucht nicht, den ursprünglichen Speicherort anzufordern, sondern verwendet ab sofort den neuen Speicherort, es sei denn, der Cache wird geleert.
Wenn eine Suchmaschinenspinne den Status 302 für eine Webseite findet, wird sie nur vorübergehend an den neuen Speicherort umgeleitet und beide Seiten crawlen. Die alte Webseiten-URL ist noch in der Suchmaschinendatenbank vorhanden und versucht immer, den alten Speicherort anzufordern und zu crawlen. Der Client / Browser versucht weiterhin, den ursprünglichen Speicherort anzufordern.
Lesen Sie mehr darüber, wie Sie es in asp.net c # implementieren und welche Auswirkungen es auf Suchmaschinen hat - http://www.dotnetbull.com/2013/08/301-permanent-vs-302-temporary-status-code-aspnet -csharp-Implementation.html
quelle
Meistens ist 301 vs 302 wichtig für die Indizierung in Suchmaschinen, da ihre Crawler dies berücksichtigen und den PageRank übertragen, wenn sie 301 verwenden.
Siehe Peter Lee Antwort für weitere Details.
quelle
301 ist, dass der angeforderten Ressource eine neue permanente URI zugewiesen wurde und alle zukünftigen Verweise auf diese Ressource unter Verwendung einer der zurückgegebenen URIs erfolgen sollten.
302 ist, dass sich die angeforderte Ressource vorübergehend unter einem anderen URI befindet.
Da die Umleitung gelegentlich geändert werden kann, sollte der Client den Anforderungs-URI weiterhin für zukünftige Anforderungen verwenden.
Diese Antwort kann nur zwischengespeichert werden, wenn dies durch ein Cache-Control- oder Expires-Headerfeld angezeigt wird.
quelle
<?php header("location: http://example.com/new.php"); ?>
und der Datei new.php -<?php echo 'I am new'; ?>
und gehen Sie zum Link . Dort wird der Text "Ich bin neu" umgeleitet und angezeigt. Ersetzen Sie dann den Code in old.php durch<?php echo 'I am old'; ?>
und gehen Sie auch zum Link . Sie sehen den Text "Ich bin alt". Wenn Sie die 301-Umleitung in old.php durchgeführt haben, hätten Sie den Text "Ich bin neu" auch nach den Änderungen im Code von old.php gesehen.webcomic.com/latest
undwebcomic.com/some-comic-title
mit einem 301 umgeleitet wird, leitet der Browser immer zu "some-comic-title" um. Selbst wenn der nächste Comic veröffentlicht wurde und "neueste" jetzt zu "einem anderen Comic-Titel" weiterleitet ... Hier wäre ein 302 besser.301 Weiterleitungen werden unbegrenzt zwischengespeichert (zumindest von einigen Browsern).
Wenn Sie also eine 301 einrichten und diese Seite besuchen, werden Sie nicht nur umgeleitet, sondern diese Umleitung wird zwischengespeichert.
Wenn Sie diese Seite erneut besuchen, macht sich Ihr Browser * nicht einmal die Mühe, diese URL anzufordern, sondern geht nur zum zwischengespeicherten Umleitungsziel.
Die einzige Möglichkeit, eine 301 für einen Besucher mit dieser Umleitung im Cache rückgängig zu machen, besteht darin, zur ursprünglichen URL ** zurückzukehren. In diesem Fall bemerkt der Browser die Schleife und fordert schließlich die eingegebene URL wirklich an.
Offensichtlich ist dies keine Option, wenn Sie sich für Facebook oder eine andere Ressource entschieden haben, die Sie nicht vollständig unter Kontrolle haben.
Leider bieten viele Hosting-Anbieter in ihrer Admin-Oberfläche eine Funktion namens "Umleitung" an, die eine 301-Umleitung durchführt. Wenn Sie dies verwenden, um Ihre Domain vorübergehend als kommende Seite auf Facebook umzuleiten, sind Sie im Grunde genommen durcheinander.
* mindestens Chrome und Firefox, je nachdem, wie lange Browser HTTP 301s zwischenspeichern? . Habe es gerade mit Chrome 45 versucht. Bearbeiten: Safari 7.0.6 unter Mac wird auch zwischengespeichert, ein Neustart des Browsers hat nicht geholfen (Link sagt, dass es unter Safari 5 unter Windows hilft.)
** Ich habe Javascript ausprobiert
window.location = ''
, da dies die Lösung ist, die in den meisten Fällen angewendet werden kann - es funktioniert nicht. Dies führt zu einer unentdeckten Endlosschleife. PHP unterbrichtheader('Location: new.url')
jedoch die SchleifeFazit : Verwenden Sie 301s nur, wenn Sie absolut sicher sind, dass Sie diese URL nie wieder verwenden werden. Normalerweise nie im Root-Verzeichnis (example.com/)
quelle
Das Hauptproblem bei 301 ist, dass der Browser die Umleitung zwischenspeichert, selbst wenn Sie die Umleitung von der Serverebene deaktiviert haben.
Es ist immer besser, 302 zu verwenden, wenn Sie die Umleitung für ein kurzes Wartungsfenster aktivieren.
quelle