Jaka jest różnica między Server.Transfer
i Response.Redirect
?
- Jakie są zalety i wady każdego z nich?
- Kiedy jedno jest odpowiednie w stosunku do drugiego?
- Kiedy ktoś nie jest odpowiedni?
asp.net
redirect
server.transfer
kedar kamthe
źródło
źródło
Server.TransferRequest
z trybu zintegrowanego IIS 7, możesz rozważyć użycie zamiast niegoServer.Transfer
.Odpowiedzi:
Response.Redirect
po prostu wysyła wiadomość (HTTP 302) do przeglądarki.Server.Transfer
dzieje się bez wiedzy przeglądarki, przeglądarka żąda strony, ale serwer zwraca treść innej.źródło
Response.Redirect()
wyśle cię na nową stronę, zaktualizuje pasek adresu i doda go do historii przeglądarki. W przeglądarce możesz kliknąć wstecz.Server.Transfer()
nie zmienia paska adresu. Nie możesz trafić.Używam,
Server.Transfer()
gdy nie chcę, aby użytkownik widział, dokąd zmierzam. Czasami na stronie typu „ładowanie”.W przeciwnym razie zawsze użyję
Response.Redirect()
.źródło
Mówiąc krótko:
Response.Redirect
po prostu mówi przeglądarce, aby otworzyła inną stronę.Server.Transfer
pomaga zredukować liczbę żądań serwera, utrzymuje ten sam adres URL i, przy odrobinie błędów, pozwala przenieść ciąg zapytania i zmienne formularza.Coś, co znalazłem i zgadzam się z ( źródło ):
źródło
maintaining the original URL... ...really help streamline data entry techniques
?Response.Redirect()
należy stosować, gdy:Server.Transfer()
należy stosować, gdy:źródło
Response.Redirect przekierowuje stronę na inną stronę po przybyciu pierwszej strony do klienta. Tak więc klient zna przekierowanie.
Server.Transfer kończy bieżące wykonanie strony. Klient nie zna przekierowania. Pozwala przenieść ciąg zapytania i zmienne formularza.
To zależy od twoich potrzeb wyboru, który jest lepszy.
źródło
Response.Redirect
, aby załadować oryginalną stronę, nawet jeśli zadzwoniłemResponse.Redirect
?„response.redirect” i „server.transfer” pomaga przenieść użytkownika z jednej strony na drugą podczas wykonywania strony. Ale sposób, w jaki dokonują tego transferu / przekierowania, jest zupełnie inny.
Jeśli jesteś wizualnym facetem i wolisz zobaczyć demonstrację niż teorię, proponuję zobaczyć poniższy film na Facebooku, który wyjaśnia różnicę w bardziej demonstracyjny sposób.
https://www.facebook.com/photo.php?v=762186150488997
Główną różnicą między nimi jest to, kto dokonuje transferu. W „response.redirect” transfer odbywa się w przeglądarce, natomiast w „server.transfer” serwer. Spróbujmy zrozumieć to stwierdzenie w bardziej szczegółowy sposób.
W „Server.Transfer” następująca sekwencja jest następująca:
1. Użytkownik wysyła żądanie do strony ASP.NET. Na poniższym rysunku żądanie jest wysyłane do „WebForm1” i chcielibyśmy przejść do „Webform2”.
2. Serwer rozpoczyna wykonywanie „Webform1” i rozpoczyna się cykl życia strony. Ale przed zakończeniem pełnego cyklu życia strony „Server.transfer” dzieje się z „WebForm2”.
3. Tworzony jest obiekt strony „Webform2”, wykonywany jest pełny cykl życia strony, a następnie wyjściowa odpowiedź HTML jest wysyłana do przeglądarki.
W „Response.Redirect” poniżej znajduje się sekwencja zdarzeń do nawigacji: -
1. Klient (przeglądarka) wysyła żądanie do strony. Na poniższym rysunku żądanie jest wysyłane do „WebForm1” i chcielibyśmy przejść do „Webform2”.
2. Cykl życia „Webform1” zaczyna się uruchamiać. Ale pomiędzy cyklem życia zdarza się „Response.Redirect”.
3. Teraz zamiast przekierowywania serwer wysyła do przeglądarki polecenie HTTP 302. To polecenie informuje przeglądarkę, że musi zainicjować żądanie GET na stronie „Webform2.aspx”.
4.Browser interpretuje polecenie 302 i wysyła żądanie GET dla „Webform2.aspx”.
Innymi słowy „Server.Transfer” jest wykonywany przez serwer, podczas gdy „Response.Redirect” jest wykonywany przez przeglądarkę. „Response.Redirect” wymaga dwóch próśb o przekierowanie strony.
Kiedy więc użyć „Server.Transfer”, a kiedy „Response.Redirect”?
Użyj „Server.Transfer”, jeśli chcesz nawigować po stronach znajdujących się na tym samym serwerze, użyj „Response.Redirect”, jeśli chcesz nawigować między stronami, które znajdują się na innym serwerze i domenie.
Poniżej znajduje się tabela podsumowująca, która przedstawia różnice i w którym scenariuszu zastosować.
źródło
Server.Transfer
: tego samego serwera lub tej samej strony IIS ?Piękno Server.Transfer możesz z tym zrobić:
Możesz uzyskać wszystko z poprzedniej strony przy użyciu powyższej metody, o ile korzystasz z Server.Transfer, ale nie Response.Redirect
źródło
Oprócz komentarza ScarletGarden należy także wziąć pod uwagę wpływ wyszukiwarek i przekierowania. Czy ta strona została przeniesiona na stałe? Tymczasowo? To robi różnicę.
patrz: Response.Redirect vs. „301 Moved Permanently” :
źródło
Transfer odbywa się całkowicie po stronie serwera. Pasek adresu klienta pozostaje stały. Pewna złożoność związana z przenoszeniem kontekstu między żądaniami. Opróżnianie i ponowne uruchamianie procedur obsługi stron może być kosztowne, więc zrób transfer na początku rurociągu, np. W module HttpModu podczas BeginRequest. Przeczytaj uważnie dokumenty MSDN oraz przetestuj i zrozum nowe wartości HttpContext.Request - szczególnie w scenariuszach Postback. Zazwyczaj używamy Server.Transfer do scenariuszy błędów.
Przekierowanie kończy żądanie ze statusem 302 i odpowiedzią w obie strony po stronie klienta i wewnętrznie zjada wyjątek (drobne trafienie serwera - zależy od tego, ile robisz dziennie). Klient następnie przechodzi do nowego adresu. Pasek adresu przeglądarki i aktualizacje historii itp. Klient pokrywa koszt dodatkowej podróży w obie strony - koszt zależy od opóźnienia. W naszej działalności często przekierowujemy , napisaliśmy własny moduł, aby uniknąć kosztów wyjątków.
źródło
Istnieje wiele różnic określonych powyżej. Oprócz przede wszystkim jest jeszcze jedna różnica.
Response.Redirect()
może być użyty do przekierowania użytkownika na dowolną stronę, która nie jest częścią aplikacji, aleServer.Transfer()
może być użyty tylko do przekierowania użytkownika w aplikacji.źródło
Odpowiedź.Redirect jest bardziej kosztowny, ponieważ dodaje dodatkową podróż do serwera, aby dowiedzieć się, gdzie iść.
Server.Transfer jest bardziej wydajny, jednak może być nieco mylący dla użytkownika, ponieważ adres URL nie zmienia się fizycznie.
Z mojego doświadczenia wynika, że różnica w wydajności nie była wystarczająco znacząca, aby zastosować to drugie podejście
źródło
Server.Transfer nie zmienia adresu URL w przeglądarce klienta, więc w rzeczywistości przeglądarka nie wie, że zmieniłeś się na inny moduł obsługi po stronie serwera. Odpowiedź Odpowiedź przekierowuje przeglądarkę na przejście na inną stronę, więc zmienia się adres URL na pasku tytułowym.
Server.Transfer jest nieco szybszy, ponieważ pozwala uniknąć jednej podróży do serwera, ale brak zmiany adresu URL może być dla ciebie dobry lub zły, w zależności od tego, co próbujesz zrobić.
źródło
Odpowiedź: Przekierowanie: informuje przeglądarkę, że żądaną stronę można znaleźć w nowej lokalizacji. Przeglądarka następnie inicjuje kolejne żądanie do nowej strony ładującej jej zawartość w przeglądarce. Powoduje to dwa żądania przeglądarki.
Server.Transfer: Przenosi wykonanie z pierwszej strony na drugą stronę na serwerze. Jeśli chodzi o klienta przeglądarki, wysłał jedno żądanie, a strona początkowa odpowiada stroną z treścią. Zaletą tego podejścia jest o jedną podróż w obie strony do serwera z przeglądarki klienta. Ponadto wszelkie zmienne formularza i parametry ciągu zapytania są dostępne również na drugiej stronie.
źródło
Jeszcze więcej szczegółów na temat Transfer (), tak naprawdę jest to Server.Execute () + Response.End (), jego kod źródłowy znajduje się poniżej (z Mono / .net 4.0):
a dla Execute () to, co należy uruchomić, to moduł obsługi podanej ścieżki, patrz
źródło
Response.Redirect obejmuje dodatkową podróż w obie strony i aktualizuje pasek adresu.
Server.Transfer nie powoduje zmiany paska adresu, serwer odpowiada na żądanie treścią z innej strony
na przykład
Odpowiedź. Przekierowanie: -
Server.Transfer: -
Odpowiedź. Przekierowanie
Plusy: - RESTful - Zmienia pasek adresu, adres może być używany do rejestrowania zmian stanu pomiędzy żądaniami.
Minusy: - powolne - istnieje dodatkowa podróż w obie strony między klientem a serwerem. Może to być kosztowne, gdy występuje znaczne opóźnienie między klientem a serwerem.
Server.Transfer
Plusy: - Szybko.
Minusy: - Stan utracony - Jeśli używasz Server.Transfer, aby zmienić stan aplikacji w odpowiedzi na zwrotne wiadomości, jeśli strona zostanie ponownie załadowana, stan zostanie utracony, ponieważ pasek adresu będzie taki sam, jak był na pierwsze żądanie.
źródło
Response.Redirect Response.Redirect () wyśle cię na nową stronę, zaktualizuje pasek adresu i doda go do historii przeglądarki. W przeglądarce możesz kliknąć wstecz. Przekierowuje żądanie do niektórych zwykłych stron HTML na naszym serwerze lub na inny serwer WWW. Powoduje to dodatkowe objazdy do serwera na każde żądanie. Nie zachowuje ciągów zapytań i zmiennych formularzy z pierwotnego żądania. Pozwala zobaczyć nowy przekierowany adres URL, w którym jest przekierowany w przeglądarce (i być w stanie dodać go do zakładek, jeśli to konieczne). Odpowiedź. Przekierowanie po prostu wysyła wiadomość do przeglądarki (HTTP 302).
Server.Transfer Server.Transfer () nie zmienia paska adresu, nie możemy trafić wstecz. Należy użyć Server.Transfer (), gdy on / ona nie chce, aby użytkownik widział, dokąd zmierza. Kiedyś na stronie typu „ładowanie”. Przenosi bieżące żądanie strony na inną stronę .aspx na tym samym serwerze. Oszczędza zasoby serwera i pozwala uniknąć niepotrzebnych objazdów do serwera. Zachowuje ciąg zapytania i zmienne formularza (opcjonalnie). Nie pokazuje prawdziwego adresu URL, pod którym przekierowuje żądanie w przeglądarce internetowej użytkownika. Server.Transfer odbywa się bez wiedzy przeglądarki, przeglądarka żąda strony, ale serwer zwraca treść innej.
źródło