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

时间:2009-09-04 07:46:09

标签: asp.net server.transfer

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

5 个答案:

答案 0 :(得分:9)

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

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

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

来自:Server.Transfer vs. Response.Redirect

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

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

答案 1 :(得分:5)

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

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

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

答案 2 :(得分:3)

Server.Transfer只能发生在单个HttpContext上。每个虚拟目录或应用程序都有自己的HttpContext对象,他们不知道它们共存!所以你不能这样做。

答案 3 :(得分:1)

答案 4 :(得分:0)

服务器之间不会共享会话,因此这将是一个大问题。