代码之家  ›  专栏  ›  技术社区  ›  Manoj Attal

为什么不能使用server.transfer()在另一台服务器上重定向

  •  3
  • Manoj Attal  · 技术社区  · 15 年前

    我知道server.transfer()应该用于重定向到同一服务器上的另一个“.aspx”页。但是,我为什么不应该使用这个方法重定向到另一个服务器或HTML页面上的ASPX页面呢? 你的答案很贴切。

    5 回复  |  直到 15 年前
        1
  •  3
  •   this. __curious_geek    15 年前

    只能对单个httpContext执行server.transfer。每个虚拟目录或应用程序都有自己的httpcontext对象,它们不知道它们共存!所以你不能这样做。

        2
  •  9
  •   AnthonyWJones    15 年前

    首先,使用服务器传输到另一个页面。传输节省服务器资源。它不告诉浏览器重定向,而是简单地更改Web服务器上的“焦点”并传输请求。这意味着通过HTTP请求的数量不多,从而减轻了Web服务器的压力,使应用程序运行得更快。

    但是要注意:因为“传输”过程只能在服务器上运行的那些站点上工作,所以不能使用服务器。传输将用户发送到外部站点。只有响应。重定向可以做到这一点。

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

    来自: Server.Transfer vs. Response.Redirect

    所以,简而言之:response.redirect只是告诉浏览器访问另一个页面。transfer有助于减少服务器请求,保持URL的一致性,并通过一点bug攻击,允许您传输查询字符串和表单变量。

    • response.redirect更加用户友好,因为网站访问者可以将他们重定向到的页面添加书签。
    • 传输的页面在客户机中显示为与实际不同的URL。这意味着,如果从其他目录传输到页面,诸如相对链接/图像路径之类的内容可能无法工作。
    • transfer有一个可选参数,用于将表单数据传递到新页。
    • 自发布版本以来,这就不再有效,因为视图状态现在默认具有更高的安全性(EnableViewStateMac默认为true),因此新页面无法访问表单数据。您仍然可以通过请求原始处理程序来访问新页中原始页的值:
        3
  •  5
  •   Hans Kesting    15 年前

    server.transfer()只能在一个Web应用程序中工作。

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

    如果您想让处理继续在另一个Web应用程序上进行,您将需要一个新的请求。这意味着您需要让浏览器发出另一个请求,所以您需要一个response.redirect。

        4
  •  1
  •   Community CDub    8 年前
        5
  •  0
  •   Sani Huttunen    15 年前

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

    推荐文章