Какая разница между Server.Transfer
а Response.Redirect
?
- Каковы преимущества и недостатки каждого?
- Когда один уместен над другим?
- Когда один не подходит?
asp.net
redirect
server.transfer
Кедар Камте
источник
источник
Server.TransferRequest
вместоServer.Transfer
.Ответы:
Response.Redirect
просто отправляет сообщение (HTTP 302) в браузер.Server.Transfer
происходит, когда браузер ничего не знает, браузер запрашивает страницу, но сервер возвращает содержимое другой.источник
Response.Redirect()
отправит вас на новую страницу, обновит адресную строку и добавит ее в историю браузера. В вашем браузере вы можете нажать кнопку назад.Server.Transfer()
не меняет адресную строку. Вы не можете нанести ответный удар.Я использую,
Server.Transfer()
когда я не хочу, чтобы пользователь видел, куда я иду. Иногда на странице типа «загрузка».В противном случае я всегда буду использовать
Response.Redirect()
.источник
Быть коротким:
Response.Redirect
просто говорит браузеру посетить другую страницу.Server.Transfer
помогает сократить запросы к серверу, сохраняет URL-адрес одинаковым и, с небольшой ошибкой, позволяет передавать строку запроса и переменные формы.Что-то я нашел и согласен с ( источник ):
источник
maintaining the original URL... ...really help streamline data entry techniques
?Response.Redirect()
следует использовать, когда:Server.Transfer()
следует использовать, когда:источник
Response.Redirect перенаправляет страницу на другую страницу после того, как первая страница прибывает к клиенту. Так что клиент знает перенаправление.
Server.Transfer завершает текущее исполнение страницы. Клиент не знает перенаправление. Это позволяет передавать строку запроса и переменные формы.
Так что это зависит от ваших потребностей, чтобы выбрать, что лучше.
источник
Response.Redirect
чтобы загрузить исходную страницу, даже если я позвонилResponse.Redirect
?«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-ответ отправляется в браузер.
В «Response.Redirect» следующая последовательность событий для навигации:
1. Клиент (браузер) отправляет запрос на страницу. На рисунке ниже запрос отправляется в «WebForm1», и мы хотим перейти к «Webform2».
2. Запускается цикл «Webform1». Но между жизненным циклом происходит отклик Response.Redirect.
3. Теперь сервер вместо перенаправления отправляет в браузер команду HTTP 302. Эта команда сообщает браузеру, что он должен инициировать запрос GET на странице "Webform2.aspx".
4. Браузер интерпретирует команду 302 и отправляет запрос GET для «Webform2.aspx».
Другими словами, «Server.Transfer» выполняется сервером, а «Response.Redirect» - браузером. «Response.Redirect» необходимо выполнить два запроса для перенаправления страницы.
Так когда же использовать «Server.Transfer» и когда использовать «Response.Redirect»?
Используйте «Server.Transfer», если вы хотите перемещаться по страницам, которые находятся на одном сервере, используйте «Response.Redirect», когда вы хотите перемещаться между страницами, которые находятся на другом сервере и в домене.
Ниже приводится сводная таблица, в которой выявляются различия и в каком сценарии использовать.
источник
Server.Transfer
: тот же сервер или тот же веб-сайт IIS ?Прелесть Server.Transfer в том, что вы можете сделать с ним:
Вы можете получить что-нибудь с предыдущей страницы, используя вышеуказанный метод, если вы используете Server.Transfer, но не Response.Redirect
источник
В дополнение к комментарию ScarletGarden вам также необходимо учитывать влияние поисковых систем и ваше перенаправление. Эта страница переехала навсегда? Временно? Это имеет значение.
см .: Response.Redirect против "301 перемещен навсегда" :
источник
Передача полностью на стороне сервера. Адресная строка клиента остается постоянной. Некоторая сложность в передаче контекста между запросами. Очистка и перезапуск обработчиков страниц может быть дорогостоящим, поэтому сделайте перевод на ранней стадии разработки, например, в HttpModule во время BeginRequest. Внимательно прочитайте документы MSDN, протестируйте и поймите новые значения HttpContext.Request - особенно в сценариях обратной передачи. Обычно мы используем Server.Transfer для сценариев ошибок.
Перенаправление завершает запрос со статусом 302 и ответом на обратную сторону на стороне клиента с использованием внутренней исключительной ситуации (незначительное попадание на сервер - зависит от того, сколько вы делаете в день). Затем клиент переходит на новый адрес. Адресная строка браузера, обновления истории и т. Д. Клиент оплачивает дополнительную поездку туда и обратно - стоимость варьируется в зависимости от времени ожидания. В нашем бизнесе мы много перенаправляем, мы написали свой собственный модуль, чтобы избежать стоимости исключений.
источник
Есть много различий, как указано выше. Помимо всего прочего, есть еще одно отличие.
Response.Redirect()
может использоваться для перенаправления пользователя на любую страницу, которая не является частью приложения, ноServer.Transfer()
может использоваться только для перенаправления пользователя в приложении.источник
Response.Redirect является более дорогостоящим, поскольку он добавляет дополнительную поездку на сервер, чтобы выяснить, куда идти.
Server.Transfer более эффективен, однако может немного вводить пользователя в заблуждение, поскольку URL-адрес не изменяется физически.
По моему опыту, разница в производительности не была достаточно значительной, чтобы использовать последний подход
источник
Server.Transfer не изменяет URL в браузере клиента, поэтому браузер фактически не знает, что вы перешли на другой обработчик на стороне сервера. Response.Redirect сообщает браузеру перейти на другую страницу, поэтому URL в заголовке заголовка изменяется.
Server.Transfer немного быстрее, поскольку он позволяет избежать одного обращения к серверу, но неизменное изменение url может быть как хорошим, так и плохим, в зависимости от того, что вы пытаетесь сделать.
источник
Response.Redirect: сообщает браузеру, что запрашиваемую страницу можно найти в новом месте. Затем браузер инициирует другой запрос на новую страницу, загружая ее содержимое в браузер. Это приводит к двум запросам браузера.
Server.Transfer: переносит выполнение с первой страницы на вторую страницу на сервере. Что касается клиента браузера, он сделал один запрос, и начальная страница отвечает за содержание. Преимущество такого подхода заключается в том, что клиентский браузер позволяет совершать еще одну поездку на сервер. Кроме того, любые опубликованные переменные формы и параметры строки запроса также доступны для второй страницы.
источник
Просто подробнее о Transfer (), это на самом деле Server.Execute () + Response.End (), его исходный код ниже (из Mono / .net 4.0):
а для Execute () то, что нужно запустить, является обработчиком заданного пути, см.
источник
Response.Redirect включает в себя дополнительную обратную передачу и обновляет адресную строку.
Server.Transfer не вызывает изменение адресной строки, сервер отвечает на запрос контентом с другой страницы
например
Response.Redirect: -
Server.Transfer: -
Response.Redirect
Плюсы: - RESTful - меняет адресную строку, адрес можно использовать для записи изменений состояния между запросами.
Минусы: - Низкая - Существует дополнительная двусторонняя связь между клиентом и сервером. Это может быть дорого, если между клиентом и сервером существует значительная задержка.
Server.Transfer
Плюсы: - Быстро.
Минусы: - Состояние потеряно - Если вы используете Server.Transfer, чтобы изменить состояние приложения в ответ на обратную передачу, если страница затем перезагрузится, это состояние будет потеряно, так как адресная строка будет такой же, как была по первому запросу.
источник
Response.Redirect Response.Redirect () отправит вас на новую страницу, обновит адресную строку и добавит ее в историю браузера. В вашем браузере вы можете нажать кнопку назад. Он перенаправляет запрос на несколько простых HTML-страниц на нашем сервере или на другой веб-сервер. Это вызывает дополнительные обращения к серверу при каждом запросе. Он не сохраняет Query String и Form Variables из исходного запроса. Это позволяет увидеть новый перенаправленный URL-адрес, где он перенаправлен в браузере (и иметь возможность добавить его в закладки, если это необходимо). Отклик. Redirect просто отправляет сообщение в браузер (HTTP 302).
Server.Transfer Server.Transfer () не меняет адресную строку, мы не можем нанести ответный удар. Следует использовать Server.Transfer (), когда он / она не хочет, чтобы пользователь видел, куда он идет. Когда-нибудь на странице типа «загрузка». Он передает текущий запрос страницы на другую страницу ASPX на том же сервере. Это сохраняет ресурсы сервера и позволяет избежать ненужных обращений к серверу. Он сохраняет Query String и Form Variables (опционально). Он не показывает реальный URL, куда он перенаправляет запрос в веб-браузер пользователя. Server.Transfer происходит, когда браузер ничего не знает, браузер запрашивает страницу, но сервер возвращает содержимое другой.
источник