Response.Redirect
просто отправляет сообщение (HTTP 302) вниз к браузеру.
Server.Transfer
происходит без браузера, зная что-либо, запрос браузера страница, но сервер возвращает содержание другого.
Передача является совершенно серверной стороной. Клиентская строка поиска остается постоянной. Некоторая сложность о передаче контекста между запросами. Сбрасывание и перезапуск обработчиков страниц могут быть дорогими также - Ваша передача рано в конвейере, например, в HttpModule во время BeginRequest. Прочитайте документы MSDN тщательно, и протестируйте и поймите новые значения HttpContext. Запрос - особенно в сценариях Обратной передачи. Мы обычно используем Сервер. Передача для ошибочных сценариев.
Перенаправление завершает запрос с 302 состояниями и клиентский ответ туда и обратно с и внутренне ест исключение (незначительный перфект сервера совершил нападки - зависит, сколько Вы делаете день), Клиент тогда перешел к новому адресу. Адресная строка браузера & история обновляет и т.д. Клиент оплачивает стоимость дополнительного распространения в прямом и обратном направлениях - стоимость варьируется в зависимости от задержки. В нашем бизнесе мы перенаправляем много , мы записали наш собственный модуль для предотвращения стоимости исключения.
Сервер. Передача не изменяет URL в клиентском браузере, таким образом, эффективно браузер не знает, что Вы изменились на другой обработчик серверных сторон. Ответ. Перенаправление говорит браузеру перемещаться в другую страницу, таким образом, URL в изменениях строки заголовка.
Сервер. Передача немного быстрее, так как она избегает одного распространения в прямом и обратном направлениях к серверу, но неизменение URL может быть или хорошим или плохим для Вас, в зависимости от того, что Вы пытаетесь сделать.
Ответ. Перенаправление перенаправляет страницу к другой странице после , первая страница прибывает в клиент. Таким образом, клиент знает перенаправление.
Сервер. Передача выходит из текущего выполнения страницы. Клиент не знает перенаправление. Это позволяет Вам передавать переменные формы и строка запроса.
, Таким образом, это зависит к Вашим потребностям выбрать, который лучше.
Ответ. Перенаправление является более дорогостоящим, так как оно добавляет дополнительное прохождение в сервер для выяснения, куда пойти.
Сервер. Передача более эффективна однако, она может немного вводить в заблуждение пользователю, так как URL физически не изменяется.
, По моему опыту, разница в производительности не была достаточно значительной для использования последнего подхода
Быть Коротким: Response.Redirect
просто говорит браузеру посещать другую страницу. Server.Transfer
помогает уменьшить запросы к серверу, сохраняет URL тем же и, с небольшим избиением ошибки, позволяет Вам передавать переменные формы и строка запроса.
Что-то я нашел, и согласитесь с ( источник ):
Server.Transfer
подобно в этом, это отправляет пользователю в другую страницу с оператором такой какServer.Transfer("WebForm2.aspx")
. Однако оператор имеет много явных преимуществ и недостатков.Во-первых, передавая другой странице с помощью
Server.Transfer
сохраняет ресурсы сервера. Вместо того, чтобы говорить браузеру перенаправлять, это просто изменяет "внимание" на веб-сервер и передает запрос. Это означает, что Вы не добираетесь вполне как много Запросов HTTP, проникающих, который поэтому упрощает давление на Ваш веб-сервер и подает Ваши заявки, выполненные быстрее., Но предостерегитесь: потому что процесс "передачи" может продолжить работать только те сайты, работающие на сервере; Вы не можете использовать
Server.Transfer
для отправки пользователя во внешний сайт. ТолькоResponse.Redirect
могут сделать это., Во-вторых,
Server.Transfer
поддерживает исходный URL в браузере. Это может действительно помочь оптимизировать методы ввода данных, хотя это может сделать для беспорядка при отладке.Это не все:
Server.Transfer
метод также имеет второй parameter— "preserveForm". При установке этого наTrue
, с помощью оператора такой в качестве [1 110], существующая строка запроса и любые переменные формы все еще будут доступны странице, которой Вы передаете., Например, если Ваш WebForm1.aspx имеет контроль TextBox по имени TextBox1 и Вы передали WebForm2.aspx с preserveForm набором параметра к Правда, Вы сможете получить значение исходного управления страницей TextBox путем ссылки
Request.Form("TextBox1")
.
Response.Redirect()
отправит Вас в новую страницу, обновит строку поиска и добавит его к Истории Браузера. На Вашем браузере можно нажать назад.
Server.Transfer()
не изменяет строку поиска. Вы не можете защищаться.
я использую Server.Transfer()
, когда я не хочу, чтобы пользователь видел, куда я иду. Иногда на "загружающейся" полосе набора.
Иначе я буду всегда использовать Response.Redirect()
.
В дополнение к комментарию ScarletGarden также необходимо рассмотреть влияние поисковых систем и перенаправление. Эта страница переместилась постоянно? Временно? Это имеет значение.
см.: Ответ. Перенаправление по сравнению с "301, Перемещенными Постоянно" :
Мы все использовали Ответ. Перенаправление в какой-то момент. Это - быстрый и простой способ указать на посетителей в правильном направлении, если они так или иначе оказываются в неправильном месте. Но Вы знали тот Ответ. Перенаправление отправляет код состояния ответа HTTP "302, Найденных", когда Вы могли бы действительно хотеть отправить "301 Перемещенный Постоянно"?
различие кажется небольшим, но в определенных случаях оно может на самом деле иметь большое значение. Например, при использовании "301 Перемещенного Постоянно" кода ответа большинство поисковых систем удалит устаревшую ссылку из своего индекса и заменит его новым. Если Вы будете использовать "302 Найденных", то они продолжат возвращаться к старой странице...