A HTTP Redirect arra szolgál, hogy egy HTTP kérésre olyan választ küldjünk vissza a kliensnek, aminek hatására az automatikusan újabb kérést fog küldeni az általunk megadott URL-re. Magyarul, hogy "átdobjuk egy másik oldalra".
A HTTP protokoll számos lehetőséget biztosít erre (az összes 300-as statáuszkód valamilyen redirecttel kapcsolatos választ jelent), de igazából két verzió igazán "népszerű": a 301-es kódú állandó (permanent) és a 302-es kódú ideiglenes (temporary) redirectet.
"301 Moved Permanently": Az állandó redirect azt közli a klienssel, hogy az általa kért erőforrás URL-je megválozott, a jövőben akár kliensoldalon is elcachelheti ezt a tudást, ha akarja (a böngészők többnyire ennek ellenére sem akarják). Jellemző felhasználás: megváltozott az oldal neve, régi domainről átdobunk az újra, stb.
"302 Moved Temporarily": Az ideiglenes redirect azt mondja a kliensnek, hogy az általa megcímzett erőforrás ideiglenesen más címen érhető el, próbája ott - legalábbis ez volt vele az eredeti cél. In tha real life, viszonylag ritkán pakolászik az ember odébb tartalmakat ideiglenesen, viszont a 302-es redirect ideális pl. forms login előtti / utáni login page-re, illetve original page-re való "átdobáláskor".
A 301/302 redirectnek van továbbá SEO vonatkozása is: a Google indexelője nem szereti, ha ugyanaz a tartalom több URL-en keresztül is elérhető (pl. http://mysite.hu és http://mysite.hu/Nyitooldal). A PageRank csökkentő büntetést ez esetben el lehet kerülni, ha az "alternatív" címekről átirányítjuk a látogatókat egyetlen címre - méghozzá 301-es (állandó) redirecttel.
Ha el lehet, akkor kerüljük is el! Ami a bukó, hogy az ASP.NET Response.Redirect() metódusa alapból 302-es (temporary) redirectet küld, és nincs is olyan overload, amivel egyszerűen rá lehetne venni, hogy 301-est küldjön. A Response közveltlen manipulálásával (a status code, illetve a Location header beállításával) azonban rá lehet venni az ASP.NET-et is a 301-es redirectre.
Ezt a low-level matatást célszerű bezárni mondjuk egy HttpResponse extension method-ba:
public static class ResponseExtensions { public static void RedirectPermanently(this HttpResponse response, string url) { response.Clear(); response.Status = "301 Moved Permanently"; response.AddHeader("Location", url); response.End(); } }
Így az átirányítás egyszerűen egy Response.RedirectPermanently("http://mysite.hu")-val elintézhető.
Legalábbis eddig így lehetett. A Framework fejlesztői azonban meghallották az új idők szavát: .NET Framework 4.0-tól a HttpResponse osztálynak lesz RedirectPermanent() metódusa. A fejlődés megállíthatatlan!

0 megjegyzés:
Megjegyzés küldése