Server.Transfer Vs. Response.Redirect - PullRequest
       80

Server.Transfer Vs. Response.Redirect

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

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

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

Ответы [ 16 ]

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

Response.Redirect более дорогостоящий, так как он добавляет дополнительную поездку на сервер, чтобы выяснить, куда идти.

Server.Transfer более эффективен, однако может немного вводить пользователя в заблуждение, поскольку URL-адрес не изменяется физически.

По моему опыту, разница в производительности не была достаточно значительной, чтобы использовать последний подход

4 голосов
/ 24 января 2012

Response.Redirect: сообщает браузеру, что запрашиваемую страницу можно найти в новом месте. Затем браузер инициирует другой запрос на новую страницу, загружая ее содержимое в браузер. Это приводит к двум запросам браузера.

Server.Transfer: Передает выполнение с первой страницы на вторую страницу сервера. Что касается клиента браузера, он сделал один запрос, и начальная страница отвечает за содержание. Преимущество этого подхода заключается в том, что клиентский браузер позволяет совершать еще одну поездку на сервер. Кроме того, любые опубликованные переменные формы и параметры строки запроса также доступны для второй страницы.

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

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

Server.Transfer немного быстрее, поскольку он позволяет избежать одного обращения к серверу, но неизменное изменение url может быть как хорошим, так и плохим, в зависимости от того, что вы пытаетесь сделать.

3 голосов
/ 12 сентября 2013

Просто подробнее о Transfer (), это на самом деле Server.Execute () + Response.End (), его исходный код ниже (из Mono / .net 4.0):

public void Transfer (string path, bool preserveForm)
{
    this.Execute (path, null, preserveForm, true);
    this.context.Response.End ();
}

и для Execute () необходимо запустить обработчик указанного пути, см.

ASP.NET не проверяет, авторизован ли текущий пользователь для просмотра ресурса, доставленного методом Execute . Хотя логика авторизации и аутентификации ASP.NET выполняется до вызова исходного обработчика ресурсов, ASP.NET напрямую вызывает обработчик, указанный методом Execute , и не перезапускает логику аутентификации и авторизации для нового ресурса. Если политика безопасности вашего приложения требует, чтобы клиенты имели соответствующую авторизацию для доступа к ресурсу, приложение должно принудительно выполнить повторную авторизацию или предоставить настраиваемый механизм контроля доступа.

Вы можете принудительно выполнить повторную авторизацию, используя метод Redirect вместо метода Execute . Redirect выполняет перенаправление на стороне клиента, при котором браузер запрашивает новый ресурс. Поскольку это перенаправление является новым запросом, поступающим в систему, на него распространяется вся логика проверки подлинности и авторизации как IIS, так и политики безопасности ASP.NET.

- от MSDN

1 голос
/ 14 мая 2014

Response.Redirect включает в себя дополнительную обратную передачу и обновляет адресную строку.

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

, например

Response.Redirect: -

  1. На клиенте браузер запрашивает страницу http://InitiallyRequestedPage.aspx
  2. На сервере отвечает на запрос 302, передавая адрес перенаправления http://AnotherPage.aspx.
  3. На клиенте браузер делает второй запрос на адрес http://AnotherPage.aspx.
  4. На сервере отвечает с контентом http://AnotherPage.aspx

Server.Transfer: -

  1. На клиентском браузере запрашивает страницу http://InitiallyRequestedPage.aspx
  2. На сервере Server.Transfer to http://AnotherPage.aspx
  3. На сервере выдается ответ на запрос http://InitiallyRequestedPage.aspx с возвратом контента из http://AnotherPage.aspx

Response.Redirect

Плюсы: - RESTful - изменяет адресную строку, адрес может использоваться для записи изменений состояния между запросами.

Минусы: - Медленно - между клиентом и сервером существует дополнительная передача туда и обратно. Это может быть дорого, если между клиентом и сервером существует значительная задержка.

Server.Transfer

Плюсы: - Быстрый.

Минусы: - Состояние потеряно - если вы используете Server.Transfer для изменения состояния приложения в ответ на обратную связь, если страница затем перезагружается, это состояние будет потеряно, так как адресная строка будет такой же, как и в первом запрос.

0 голосов
/ 20 июля 2015

Response.Redirect Response.Redirect () отправит вас на новую страницу, обновит адресную строку и добавит ее в историю браузера. В вашем браузере вы можете нажать назад. Он перенаправляет запрос на несколько простых HTML-страниц на нашем сервере или на другой веб-сервер. Это вызывает дополнительные обращения к серверу при каждом запросе. Он не сохраняет строки запроса и переменные формы из исходного запроса. Это позволяет увидеть новый перенаправленный URL-адрес, где он перенаправлен в браузере (и иметь возможность добавить его в закладки, если это необходимо). Отклик. Redirect просто отправляет сообщение в браузер (HTTP 302).

Server.Transfer Server.Transfer () не меняет адресную строку, мы не можем нанести ответный удар. Один должен использовать Server.Transfer (), когда он / она не хочет, чтобы пользователь видел, куда он идет. Когда-нибудь на странице типа «загрузка». Он передает текущий запрос страницы на другую страницу .aspx на том же сервере. Это сохраняет ресурсы сервера и позволяет избежать ненужных обращений к серверу. Он сохраняет Query String и Form Variables (опционально). Он не показывает реальный URL, куда он перенаправляет запрос в веб-браузер пользователя. Server.Transfer происходит, когда браузер ничего не знает, браузер запрашивает страницу, но сервер возвращает содержимое другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...