为什么我们不能使用Server.Transfer()在另一台服务器上重定向

Man*_*tal 3 asp.net server.transfer

我知道Server.Transfer()应该用于重定向到同一服务器上的另一个".aspx"页面.但是为什么我不应该使用这种方法重定向到另一个服务器或html页面上的aspx页面的原因是什么?你的答案非常贴切.

Tar*_*rik 9

首先,使用Server.Transfer传输到另一个页面可节省服务器资源.它不是告诉浏览器重定向,而只是改变Web服务器上的"焦点"并传输请求.这意味着您无法获得尽可能多的HTTP请求,因此可以减轻Web服务器的压力并使您的应用程序运行得更快.

但请注意:因为"转移"过程只能在服务器上运行的那些站点上运行,所以不能使用Server.Transfer将用户发送到外部站点.只有Response.Redirect可以做到这一点.

其次,Server.Transfer在浏览器中维护原始URL.这确实有助于简化数据输入技术,尽管在调试时可能会造成混淆.

来自:Server.Transfer与Response.Redirect

所以,简而言之:Response.Redirect只是告诉浏览器访问另一个页面.Server.Transfer有助于减少服务器请求,保持URL相同,并且通过一些小错误,允许您传输查询字符串和表单变量.

  • Response.Redirect更加用户友好,因为网站访问者可以将他们重定向到的页面加入书签.
  • 传输的页面在客户端显示为与实际不同的URL.这意味着如果从其他目录传输到页面,相对链接/图像路径等内容可能无效.
  • Server.Transfer有一个可选参数,用于将表单数据传递给新页面.
  • 从发布版本开始,这不再有效,因为Viewstate现在默认具有更多安全性(EnableViewStateMac默认为true),因此新页面无法访问表单数据.您仍然可以通过请求原始处理程序来访问新页面中原始页面的值:


Han*_*ing 5

Server.Transfer()仅适用于一个Web应用程序.

使用Transfer,请求的"处理"在内部(到Web服务器/应用程序)传递到另一个页面,因此Request对象保持不变.这意味着处理需要保留在Web应用程序中.

如果您想让其他Web应用程序继续处理,那么您需要一个新的请求.这意味着您需要让浏览器发出其他请求,因此您需要一个Response.Redirect.