Der Einsatz von HTTP 301 und 302 Statuscodes in ASP.NET

Sunday, July 06, 2008 1:32:58 AM (W. Europe Daylight Time, UTC+02:00)

Die Methode Response.Redirect() kennt vermutlich jeder ASP.NET Entwickler. Mit Hilfe dieser Methode wird ein Seitenbesucher auf eine andere Webseite umgeleitet. Doch was steckt dahinter? Wann sollte man die Redirect Methode nutzen und wann nicht?

Schauen wir uns an was passiert, wenn folgender Code ausgeführt wird:

Response.Redirect("http://dotnet-snippets.de/dns/Default.aspx");


Der Webserver antwortet dem Client mit dem HTTP Statuscode 302, dies bedeutet das die Webseite temporär umgeleitet wurde.
Zitat von Wikipedia:
Die angeforderte Ressource steht vorübergehend unter der im „Location“-Header-Feld angegebenen Adresse bereit (in HTTP/1.0 „Moved Temporarily“, RFC 1945). Die alte Adresse bleibt gültig.

Im Trace sieht dies folgendermaßen aus:

302  

Wenn eine Seite temporär unter einer anderen Adresse erreichbar ist, sollte Response.Redirect() verwendet werden. Ist eine Seite zukünftig immer unter einer anderen Adresse erreichbar, sollte der HTTP Statuscode 301 verwendet werden.
Der Statuscode 301 steht für eine permanente Umleitung. Zitat von Wikipedia:
Die angeforderte Ressource steht ab sofort unter der im „Location“-Header-Feld angegebenen Adresse bereit. Die alte Adresse ist nicht länger gültig.
Dies ist sehr wichtig für Suchmaschinen, denn somit bekommen Suchmaschinen die Information, dass die alte URL aus dem Index entfernt werden kann.

Wie kann erreicht werden, dass der Statuscode 301 gesendet wird?


HttpContext.Response bietet hierzu die Eigenschaft Status und die Methode AddHeader an:

HttpContext.Current.Response.Status = "301 Moved Permanently";
HttpContext.Current.Response.AddHeader("Location", newUrl);

Um diese 301 - Weiterleitung jederzeit komfortabel nutzen zu können bietet sich eine Extension Method an:

using System.Web;

namespace Welker.Extensions
{
    public static class Extensions
    {
        public static void RedirectPermanently(this HttpResponse response, string newUrl)
        {
            HttpContext.Current.Response.Status = "301 Moved Permanently";
            HttpContext.Current.Response.AddHeader("Location", newUrl);
        }
    }
}

Nach dem Einbinden der Erweiterungsmethode kann diese über folgenden Code aufgerufen werden:

Response.RedirectPermanently("http://live.com");

Im Trace kann man den Unterschied deutlich sehen:

301

Have Fun!

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


Sunday, July 06, 2008 2:52:45 AM (W. Europe Daylight Time, UTC+02:00)
Hi,

Status = "301 Moved Permanently" kannst du dir schenken, einfach stattdessen StatusCode auf 301 setzen.
Sunday, July 06, 2008 12:03:09 PM (W. Europe Daylight Time, UTC+02:00)
Hallo Thomas,

ja, das würde reichen.
Ich finde "301 Moved Permanently" im Code verständlicher als "301".

Jan
Sunday, July 06, 2008 12:12:57 PM (W. Europe Daylight Time, UTC+02:00)
stellt sich nur die Frage nach dem Use Case für 301
was will man damit erreichen
Seite aus dem Index, aber seite soll weiter exisitieren?
--> würd ich ind die seite noindex aufnehmen
Seite weg für immer
--> was spricht gegen 404?
--> warum nicht redirect per web.config auf eine 301.aspx, dann hat man geliche den Überblick und ! trennt code von darstellung ;-)
Sunday, July 06, 2008 3:01:35 PM (W. Europe Daylight Time, UTC+02:00)
Hallo Hannes,

ein möglicher Usecase wäre:
Ein Webprojekt wird durch URL-Rewriting erweitert, und man möchte die Suchmaschine darüber informieren, dass ab sofort die Seite http://domain.tld/artikel.aspx?ID=42 unter der neuen URL http://domain.tld/Titel-des.Artikels.aspx erreichbar ist.
Gegen 301 spricht, dass 301 nur bei temporären Umleitungen eingesetzt werden sollte, die Suchmaschine würde also die alte URL nicht aus dem Index entfernen. Gegen 404 spricht, dass der Suchmaschineneintrag nicht mit der neuen URL aktualisiert werden würde.

Jan
Comments are closed.