Server.Transfer Vs. Response.Redirect - PullRequest
       78

Server.Transfer Vs. Response.Redirect

257 голосов
/ 22 октября 2008

В чем разница между Server.Transfer и Response.Redirect?

  • Каковы преимущества и недостатки каждого?
  • Когда один уместен над другим?
  • Когда один не подходит?

Ответы [ 16 ]

224 голосов
/ 22 октября 2008

Response.Redirect просто отправляет сообщение (HTTP 302) в браузер.

Server.Transfer происходит, когда браузер ничего не знает, браузер запрашивает страницу, но сервер возвращает содержимое другой.

90 голосов
/ 22 октября 2008

Response.Redirect() отправит вас на новую страницу, обновит адресную строку и добавит ее в историю браузера. В вашем браузере вы можете нажать назад.

Server.Transfer() не меняет адресную строку. Вы не можете нанести ответный удар.

Я использую Server.Transfer(), когда не хочу, чтобы пользователь видел, куда я иду. Иногда на странице типа «загрузка».

В противном случае я всегда буду использовать Response.Redirect().

73 голосов
/ 06 февраля 2009

Быть коротким: Response.Redirect просто говорит браузеру посетить другую страницу. Server.Transfer помогает сократить количество запросов к серверу, сохраняет URL-адрес одинаковым и, с небольшой ошибкой, позволяет передавать строку запроса и переменные формы.

Что-то, что я нашел и с которым согласен ( источник ):

Server.Transfer аналогичен тем, что отправляет пользователя на другую страницу с таким утверждением, как Server.Transfer("WebForm2.aspx"). Тем не мение, Это утверждение имеет ряд явных преимуществ и недостатков.

Во-первых, переход на другую страницу с помощью Server.Transfer экономит ресурсы сервера. Вместо того, чтобы сказать браузеру перенаправить, он просто меняет «фокус» на веб-сервере и передает запрос. Это означает, что вы не получаете столько HTTP запросы поступают, что, следовательно, уменьшает давление на ваш Веб-сервер и делает ваши приложения работать быстрее.

Но будьте осторожны: потому что процесс "передачи" может работать только на тех сайты, работающие на сервере; Вы не можете использовать Server.Transfer для отправки пользователь на внешний сайт. Только Response.Redirect может сделать это.

Во-вторых, Server.Transfer поддерживает исходный URL в браузере. Это может действительно помочь оптимизировать методы ввода данных, хотя это может сделать для путаницы при отладке.

Это еще не все: метод Server.Transfer также имеет второй параметрируемый "preserveForm". Если вы установите это True, используя инструкцию например Server.Transfer("WebForm2.aspx", True), существующий запрос строка и любые переменные формы будут по-прежнему доступны для страницы, которую вы переходят на.

Например, если ваш WebForm1.aspx имеет элемент управления TextBox, называемый TextBox1 и вы перешли на WebForm2.aspx с помощью preserveForm Если для параметра установлено значение True, вы сможете получить значение оригинальная страница управления TextBox путем ссылки Request.Form("TextBox1").

31 голосов
/ 11 ноября 2011

Response.Redirect() следует использовать, когда:

  • мы хотим перенаправить запрос на несколько простых HTML-страниц на нашем сервере или на другой веб-сервер
  • мы не заботимся о том, чтобы вызывать дополнительные обращения к серверу при каждом запросе
  • нам не нужно сохранять строковые переменные и переменные формы из исходного запроса
  • мы хотим, чтобы наши пользователи могли видеть новый перенаправленный URL-адрес, с которого он перенаправлен в своем браузере (и иметь возможность добавить его в закладки, если это необходимо)

Server.Transfer() следует использовать, когда:

  • мы хотим перенести текущий запрос страницы на другую страницу .aspx на том же сервере
  • мы хотим сохранить ресурсы сервера и избежать ненужных обращений к серверу
  • мы хотим сохранить строковые переменные и переменные формы (опционально)
  • нам не нужно показывать реальный URL, куда мы перенаправили запрос в веб-браузере пользователей
28 голосов
/ 06 февраля 2009

Response.Redirect перенаправляет страницу на другую страницу после того, как первая страница поступит к клиенту. Таким образом, клиент знает перенаправление.

Server.Transfer завершает текущее исполнение страницы. Клиент не знает перенаправление. Позволяет передавать строку запроса и переменные формы.

Так что от ваших потребностей зависит, какой из них лучше.

21 голосов
/ 19 мая 2014

enter image description here

«response.redirect» и «server.transfer» помогают переносить пользователя с одной страницы на другую страницу во время ее выполнения. Но способ, которым они делают эту передачу / перенаправление, очень отличается.

Если вы визуальный парень и хотели бы увидеть демонстрацию, а не теорию, я бы посоветовал посмотреть нижеприведенное видео на Facebook, которое объясняет разницу более наглядно.

https://www.facebook.com/photo.php?v=762186150488997

Основное различие между ними заключается в том, кто делает перевод. В «response.redirect» передача выполняется браузером, а в «server.transfer» - сервером. Попробуем разобраться в этом утверждении более подробно.

В «Server.Transfer» следующая последовательность передачи: -

1. Пользователь отправляет запрос на страницу ASP.NET. На рисунке ниже запрос отправляется в «WebForm1», и мы хотим перейти к «Webform2».

2.Сервер начинает выполнение «Webform1» и запускается жизненный цикл страницы. Но до завершения полного жизненного цикла страницы происходит «Server.transfer» с «WebForm2».

3. Создается объект страницы "Webform2", выполняется полный жизненный цикл страницы, а затем выводимый HTML-ответ отправляется в браузер.

enter image description here

В «Response.Redirect» следующая последовательность событий для навигации: -

1.Клиент (браузер) отправляет запрос на страницу. На рисунке ниже запрос отправляется в «WebForm1», и мы хотим перейти к «Webform2».

2. Цикл жизни "Webform1" начинает выполняться. Но между жизненным циклом происходит отклик Response.Redirect.

3. Теперь сервер не выполняет перенаправление, а отправляет команду HTTP 302 в браузер. Эта команда сообщает браузеру, что он должен инициировать запрос GET на странице "Webform2.aspx".

4.Browser интерпретирует команду 302 и отправляет запрос GET для «Webform2.aspx».

enter image description here

Другими словами, «Server.Transfer» выполняется сервером, а «Response.Redirect» - браузером. «Response.Redirect» необходимо выполнить два запроса для перенаправления страницы.

Итак, когда использовать «Server.Transfer» и когда использовать «Response.Redirect»?

Используйте «Server.Transfer», когда вы хотите перемещаться по страницам, которые находятся на одном сервере, используйте «Response.Redirect», когда вы хотите перемещаться между страницами, которые находятся на другом сервере и в домене.

enter image description here

Ниже приводится сводная таблица, в которой выявляются различия и в каком сценарии использовать.

enter image description here

11 голосов
/ 25 февраля 2013

Красота Server.Transfer в том, что вы можете сделать с ним:

TextBox myTxt = (TextBox)this.Page.PreviousPage.FindControl("TextBoxID");

Вы можете получить что-либо с предыдущей страницы, используя вышеуказанный метод, при условии, что вы используете Server.Transfer, но не Response.Redirect

10 голосов
/ 06 февраля 2009

В дополнение к комментарию ScarletGarden вам также необходимо учитывать влияние поисковых систем и ваше перенаправление. Эта страница переехала навсегда? Временно? Это имеет значение.

см .: Response.Redirect против "301 перемещено навсегда" :

Мы все использовали Response.Redirect на тот или иной раз. Это быстрый и простой способ привлечь внимание посетителей в правильном направлении, если они как-то в конечном итоге не в том месте. А ты знать, что Response.Redirect отправляет Код статуса ответа HTTP "302 Найдено, когда вы действительно хотите отправить "301 Переехал навсегда"?

Различие кажется небольшим, но в определенные случаи это может на самом деле сделать большая разница. Например, если вы используйте ответ «301 перемещен навсегда» код, большинство поисковых систем удалит устаревшая ссылка из их индекса и замените его новым. если ты используйте "302 найдено", они продолжат возвращаясь на старую страницу ...

6 голосов
/ 22 октября 2008

Передача полностью на стороне сервера. Адресная строка клиента остается постоянной. Некоторая сложность в передаче контекста между запросами. Очистка и перезапуск обработчиков страниц могут быть дорогими, поэтому сделайте перевод на ранней стадии разработки, например. в HttpModule во время BeginRequest. Внимательно прочитайте документы MSDN, протестируйте и поймите новые значения HttpContext.Request - особенно в сценариях обратной передачи. Обычно мы используем Server.Transfer для сценариев ошибок.

Переадресация завершает запрос со статусом 302 и ответом на обратную сторону на стороне клиента с использованием внутренней исключительной ситуации (незначительное попадание на сервер - зависит от того, сколько вы делаете в день). Затем клиент переходит на новый адрес. Адресная строка браузера, обновления истории и т. Д. Клиент оплачивает дополнительную поездку туда и обратно - стоимость варьируется в зависимости от времени ожидания. В нашем бизнесе мы перенаправляем много мы написали наш собственный модуль, чтобы избежать стоимости исключений.

5 голосов
/ 09 августа 2013

Есть много различий, как указано выше. Помимо всего прочего, есть еще одно отличие. Response.Redirect() может использоваться для перенаправления пользователя на любую страницу, которая не является частью приложения, но Server.Transfer() может использоваться только для перенаправления пользователя в приложении.

//This will work.
Response.Redirect("http://www.google.com");

//This will not work.
Server.Transfer("http://www.google.com");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...