2009-09-08 9 views
311

Soll sich der Client anders verhalten? Wie?HTTP-Weiterleitung: 301 (permanent) vs. 302 (temporär)

+0

[RFC 2616 - HTTP-Statuscodes] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html) Ich könnte alles darin wiederholen, aber es sagt es ganz klar;) – Tiemen

+2

Es lohnt sich Beachten Sie, dass die Spezifikation 303 und 307 Statuscodes für nuancierte temporäre Weiterleitungen bereitstellt. –

Antwort

489

Status 301 bedeutet, dass die Ressource (Seite) dauerhaft an einen neuen Speicherort verschoben wird. Der Client/Browser sollte nicht versuchen, den ursprünglichen Standort anzufordern, sondern von nun an den neuen Standort verwenden.

Status 302 bedeutet, dass sich die Ressource vorübergehend an einer anderen Stelle befindet und der Client/Browser die ursprüngliche URL weiterhin anfordern sollte.

+10

Danke. Bedeutet dies, dass der Client, wenn ich eine 301 (permanente) Weiterleitung verwende, entscheiden kann, den alten Standort nie mehr zu erhalten und stattdessen immer die neue URL direkt zu verwenden? – flybywire

+14

Genau! In der Tat sollte der Kunde gemäß den Spezifikationen immer zum neuen Standort gehen. –

+2

Hat dies Auswirkungen auf Suchmaschinen, die sich an bestimmte Seiten Ihrer Website erinnern, mit denen sie nicht verknüpft sind? – rybo111

17

301 ist, dass der angeforderten Ressource ein neuer permanenter URI zugewiesen wurde und alle zukünftigen Verweise auf diese Ressource SOLLEN unter Verwendung eines der zurückgegebenen URIs ausgeführt werden. 302 ist, dass die angeforderte Ressource vorübergehend unter einem anderen URI residiert. Da die Umleitung gelegentlich geändert werden kann, SOLLTE der Client weiterhin den Request-URI für zukünftige Anfragen verwenden. Diese Antwort ist nur cachable, wenn durch ein Cache-Control- oder Expires-Header Feld angezeigt wird.

+1

Also 301 macht Sinn, aber es fällt mir schwer, ein gutes Beispiel für ** 302 ** zu verwenden. –

+4

@ BobStein-VisiBone zum Beispiel der 302 Redirect: Erstelle eine Datei old.php mit dem Code ' 'und file new.php -' 'und gehen Sie zu [link] (http://example.com/old.php). Dort wird der Text "Ich bin neu" umgeleitet und angezeigt. Dann ersetzen Sie den Code in old.php durch ' 'und gehe auch zum [link] (http://example.com/old.php). Du wirst den Text "Ich bin alt" sehen. Wenn Sie die 301-Weiterleitung in der old.php durchgeführt haben, hätten Sie nach den Änderungen im Code von old.php den Text "Ich bin neu" gesehen. – Apostle

+1

@ BobStein-VisiBone Ich habe eine Seite, die veraltet ist und nicht angezeigt werden kann. Wir müssen eine neue Seite erstellen, werden aber für eine Weile nicht bereit sein. Wir verwenden eine vorübergehende Umleitung zu einer bestehenden Seite, die für Besucher nützlich ist. Sobald die neue Seite erstellt wurde, verwenden wir eine permanente Weiterleitung. – EddieC

28

Meistens 301 vs 302 ist für die Indizierung in Suchmaschinen wichtig, da ihre Crawler dies berücksichtigen und die Übertragung PageRank wenn 301.

Siehe Peter Lee's answer um weitere Informationen zu verwenden.

81

Wenn ein Suchmaschinen-Spider den Statuscode 301 im Antwortheader einer Webseite findet, versteht er, dass diese Webseite nicht mehr existiert, sucht nach dem Standortheader, wählt die neue URL und ersetzt die indizierte URL durch die neue und auch Pagerank übertragen.

So aktualisiert Suchmaschine alle indizierte URL, die nicht mehr existiert (301 gefunden) mit der neuen URL, dies wird Ihren alten Webseitenverkehr, Pagerank und umleiten sie auf die neue (Sie verlieren nicht den Verkehr der alten Webseite).

Browser: Wenn ein Browser 301 Statuscode findet, wird die Zuordnung der alten URL mit der neuen URL zwischengespeichert. Der Client/Browser versucht nicht, den ursprünglichen Speicherort anzufordern, sondern den neuen Speicherort ab sofort ist gelöscht.

enter image description here

Wenn eine Suchmaschine Spinne 302 Status für eine Webseite findet, wird es nur vorübergehend an den neuen Standort umgeleitet und beide Seiten kriechen. Die URL der alten Webseite ist immer noch in der Suchmaschine vorhanden und versucht immer, den alten Standort anzufordern und zu crawlen. Der Client/Browser versucht weiterhin, den ursprünglichen Speicherort anzufordern.

enter image description here

mehr darüber lesen, wie es in asp.net C# zu implementieren ist und was die Auswirkungen auf die Suchmaschinen - http://www.dotnetbull.com/2013/08/301-permanent-vs-302-temporary-status-code-aspnet-csharp-Implementation.html

+11

upvote zum manuellen Markieren mit der Maus/Eingabegerät. – ahnbizcad

+2

Viel besser Antwort IMO. Klarer, was genau auf technischer Ebene passiert, wofür die meisten Leute wahrscheinlich herkommen. – DarkNeuron

11

301 Umleitungen werden zwischengespeichert unbegrenzt (zumindest von einigen Browser).

Dies bedeutet, wenn Sie eine 301 einrichten, besuchen Sie diese Seite, Sie werden nicht nur umgeleitet, aber diese Umleitung wird zwischengespeichert.

Wenn Sie diese Seite erneut aufrufen, fragt Ihr Browser * nicht einmal nach dieser URL, sondern nur an das zwischengespeicherte Umleitungsziel.

Die einzige Möglichkeit, eine 301 für einen Besucher mit dieser Umleitung in Cache rückgängig zu machen, ist die Umleitung auf die ursprüngliche URL **. In diesem Fall bemerkt der Browser die Schleife und fordert schließlich die eingegebene URL an.

Offensichtlich ist das keine Option, wenn Sie sich entschieden haben, Facebook oder eine andere Ressource, die Sie nicht vollständig unter Kontrolle haben.

Leider bieten viele Hosting-Provider eine Funktion in ihrer Admin-Schnittstelle an, die einfach "Redirection" genannt wird und eine 301-Weiterleitung ausführt. Wenn Sie dies verwenden, um Ihre Domain temporär auf Facebook als eine kommende Seite umzuleiten, sind Sie im Grunde geschraubt.

* mindestens Chrome und Firefox, nach How long do browsers cache HTTP 301s?. Gerade versucht es mit Chrome 45. Edit: Safari 7.0.6 auf Mac auch Caches, hat ein Neustart des Browsers nicht helfen (. Einen Link sagt, dass auf Safari 5 auf Windows tut es Hilfe)

** Ich habe versucht, Javascript window.location = '' , weil es die Lösung wäre, die in den meisten Fällen angewendet werden könnte - es funktioniert nicht. Dies führt zu einer unentdeckten Endlosschleife. Allerdings bricht PHP header('Location: new.url') die Schleife

Bottom Line: verwenden Sie nur 301s, wenn Sie absolut sicher sind, dass Sie nie wieder diese URL verwenden werden. Normalerweise nie auf dem Stammverzeichnis (example.com/)

7

Das Hauptproblem mit 301 ist Browser wird die Umleitung zwischenspeichern, auch wenn Sie die Umleitung von der Server-Ebene deaktiviert.

Es ist immer besser 302 zu verwenden, wenn Sie die Umleitung für ein kurzes Wartungsfenster aktivieren.