Pomimo tego, iż Response.Redirect oraz Server.Transfer są dosyć często używanymi metodami przez programistów ASP.Net, często zdarza się, że tak naprawdę nie wiemy co się dzieje wskutek ich użycia.
Jak właściwie to się odbywa? W momencie użycia Response.Redirect przeglądarka otrzymuje od serwera nagłówek HTTP podobny do poniższego (w nagłówku znajdują się również dodatkowe informacje, które w tym miejscu, akurat są bez znaczenia dla wytłumaczenia tematu):
HTTP/1.1 302 Object moved
Server: Microsoft-IIS/5.0
Location: new-url/new-page.aspx
Ten nagłówek informuje przeglądarkę, iż żądana strona znajduje się pod nową lokalizacją. Po tej informacji przeglądarka wykonuje kolejne żądanie (Request), tym razem pod lokalizację przekazaną w nagłówku.
Dzięki temu mechanizmowi możemy przekierowywać klienta zarówno na strony znajdujące się na naszym serwerze jak i na pełne adresy URL (np. http://www.photoartis.pl). Nowy URL może zawierać również tzw. QueryString, m.in. dzięki czemu możemy uzyskać przekazywanie informacji między stronami.
Należy pamiętać, że w momencie zastosowania Response.Redirect wszelkie pola z POST’a zostają utracone (jest to logiczne wskutek opisanych powyżej działań, ale warto o tym przypomnieć).
Dzięki temu mechanizmowi otrzymujemy m.in. fakt, iż nie jest wykonywane kolejne żądanie HTTP po stronie klienta. Również zachowywane są wszystkie pola z POST’a.
Należy jednak pamiętać, że jeżeli strona wywołująca „Transfer” przed ta operacją zapisze coś do Response buffer to w rezultacie otrzymamy wynik z danymi zapisanymi do bufora oraz zawartością strony, na którą wykonaliśmy metodę Transfer. W takich przypadkach możemy po prostu przed wywołaniem metody przeprowadzić czyszczenie buforu Response.
Pamiętajmy również, że Server.Transfer nie umożliwia przekierowania na strony poza nasz serwer.
Response.Redirect
Metoda ta nakazuje klientowi (przeglądarce internetowej) odwiedzenie danej lokalizacji URL. W praktyce po stronie użytkownika skutek jest taki sam jak byśmy wpisali nowy adres do paska adresu.Jak właściwie to się odbywa? W momencie użycia Response.Redirect przeglądarka otrzymuje od serwera nagłówek HTTP podobny do poniższego (w nagłówku znajdują się również dodatkowe informacje, które w tym miejscu, akurat są bez znaczenia dla wytłumaczenia tematu):
HTTP/1.1 302 Object moved
Server: Microsoft-IIS/5.0
Location: new-url/new-page.aspx
Ten nagłówek informuje przeglądarkę, iż żądana strona znajduje się pod nową lokalizacją. Po tej informacji przeglądarka wykonuje kolejne żądanie (Request), tym razem pod lokalizację przekazaną w nagłówku.
Dzięki temu mechanizmowi możemy przekierowywać klienta zarówno na strony znajdujące się na naszym serwerze jak i na pełne adresy URL (np. http://www.photoartis.pl). Nowy URL może zawierać również tzw. QueryString, m.in. dzięki czemu możemy uzyskać przekazywanie informacji między stronami.
Należy pamiętać, że w momencie zastosowania Response.Redirect wszelkie pola z POST’a zostają utracone (jest to logiczne wskutek opisanych powyżej działań, ale warto o tym przypomnieć).
Server.Transfer
Ta metoda odbywa się całkowicie po stronie serwera. Np. przeglądarka wykonuje żądanie o stronę A.aspx. Aplikacja wywołuje metodę Server.Transfer(„B.aspx”). W rezultacie serwer zwraca do klienta zawartość strony B.aspx. W tym przypadku przeglądarka nadal myśli, że znajduje się na stronie A.aspx. Wskutek powyższego mechanizmu w pasku adresu przeglądarki będzie widniał URL do strony A.aspx.Dzięki temu mechanizmowi otrzymujemy m.in. fakt, iż nie jest wykonywane kolejne żądanie HTTP po stronie klienta. Również zachowywane są wszystkie pola z POST’a.
Należy jednak pamiętać, że jeżeli strona wywołująca „Transfer” przed ta operacją zapisze coś do Response buffer to w rezultacie otrzymamy wynik z danymi zapisanymi do bufora oraz zawartością strony, na którą wykonaliśmy metodę Transfer. W takich przypadkach możemy po prostu przed wywołaniem metody przeprowadzić czyszczenie buforu Response.
Pamiętajmy również, że Server.Transfer nie umożliwia przekierowania na strony poza nasz serwer.