Почему мы не можем использовать Server.Transfer() для перенаправления на другой сервер

Я знаю, что Server.Transfer() должен использоваться для перенаправления на другую страницу ".aspx" на том же сервере. Но в чем причина того, почему я не должен использовать этот метод для перенаправления на страницу aspx на другом сервере или HTML-страницу? Ваши ответы действительно ценятся.

5 ответов

Решение

Server.Transfer может происходить только для одного HttpContext. Каждый виртуальный каталог или приложение имеет свой собственный объект HttpContext, и они не знают, что они сосуществуют! так что вы не можете этого сделать.

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

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

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

От: Server.Transfer vs. Response.Redirect

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

  • Response.Redirect более удобен для пользователя, так как посетитель сайта может добавить в закладки страницу, на которую он перенаправлен.
  • Переданные страницы отображаются для клиента в виде другого URL, чем они есть на самом деле. Это означает, что такие вещи, как относительные ссылки / пути к изображениям, могут не работать, если вы переходите на страницу из другого каталога.
  • Server.Transfer имеет необязательный параметр для передачи данных формы на новую страницу.
  • Начиная с версии выпуска, это больше не работает, потому что Viewstate теперь имеет больше безопасности по умолчанию (по умолчанию EnableViewStateMac имеет значение true), поэтому новая страница не может получить доступ к данным формы. Вы по-прежнему можете получить доступ к значениям исходной страницы на новой странице, запросив оригинальный обработчик:

Server.Transfer() работает только в одном веб-приложении.

С помощью Transfer "обработка" запроса внутренне (веб-серверу / приложению) передается на другую страницу, поэтому объект Request остается прежним. Это означает, что обработка должна оставаться в веб-приложении.

Если вы хотите, чтобы обработка в другом веб-приложении продолжалась, вам потребуется новый запрос. Это означает, что вам нужно, чтобы браузер выполнил другой запрос, поэтому вам нужен Response.Redirect.

Посмотрите на Server.Transfer Vs. Response.Redirect

Сессии не распределяются между серверами, поэтому это будет большой проблемой.

Другие вопросы по тегам