Почему мы не можем использовать 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.
Сессии не распределяются между серверами, поэтому это будет большой проблемой.