关于asp.net:Server.Transfer Vs.

Server.Transfer Vs. Response.Redirect

Server.TransferResponse.Redirect有什么区别?

  • 每种方法的优缺点是什么?
  • 什么时候一个比另一个合适?
  • 什么时候不合适?


简单地向浏览器发送一个消息(http://302)。

在没有浏览器知道任何内容的情况下,浏览器要求有一页,但服务器又回复了其他内容。


将您送到一个新页,更新地址栏,并添加到浏览器历史。在您的浏览器上您可以单击后面。

不改变地址酒吧。你不能回去

当我不想用它去看我要去的地方有时候会有"装载"类型页

我将永远使用Response.Redirect()


简单地告诉浏览器浏览另一页。帮助减少服务器请求,保持相同的URL,并且,在一个小的错误基础上,允许您传输任意字符串和变量。

我发现并同意(资料来源):

BLCK1/


在下列情况下应使用Response.Redirect()

  • 我们想再次向我们的服务器上或其他网站服务器上的一些平面HTML页面提出请求。
  • 我们不在乎每一个请求的服务器的额外回合
  • 我们不需要保留原始请求中的Query String and Form Variables
  • 我们希望我们的使用者能够看到他在浏览器中重新发布的新的URL(如果有必要,也可以将它保存下来)。

在下列情况下应使用Server.Transfer()

  • 我们想将电流页请求转换到同一服务器上的另一页。
  • 我们想保留服务器资源,避免不必要的轮到服务器
  • 我们想保留查询字符串和格式变量(可选)
  • We don't need to show the real URL where we redited the request in the users web浏览器


Redirect redirects page to another page after first page arrives to client.所以客户知道重定向。

Server.Transfer quits current execution of the page.客户不知道重定向。它允许你传输字符串和形状变量。

所以,这取决于你选择更好的东西的需要。


enter image description here

"response.redirect"和"server.transfer"有助于在执行页面时将用户从一个页面传输到另一个页面。但是他们进行这种转移/重定向的方式是非常不同的。

如果你是一个视觉化的人,希望看到演示而不是理论,我建议你看看下面的Facebook视频,它以一种更具演示性的方式解释了不同之处。

https://www.facebook.com/photo.php?V=762186150488997

他们之间的主要区别是谁负责转移。在"response.redirect"中,传输由浏览器完成,而在"server.transfer"中则由服务器完成。让我们试着更详细地理解这句话。

在"server.transfer"中,以下是传输发生的顺序:

1.用户向ASP.NET页发送请求。在下图中,请求被发送到"webform1",我们希望导航到"webform2"。

2.服务器开始执行"webform1",页面的生命周期开始。但在页面的完整生命周期完成之前,"server.transfer"发生在"webform2"上。

3.创建"webform2"页面对象,执行整个页面生命周期,然后将输出HTML响应发送到浏览器。

enter image description here

在"response.redirect"中,以下是导航事件的顺序:

1.客户端(浏览器)向页面发送请求。在下图中,请求被发送到"webform1",我们希望导航到"webform2"。

2、"webform1"的生命周期开始执行。但在生命周期的中间,"response.redirect"发生了。

3.现在,他不需要服务器执行重定向,而是向浏览器发送HTTP302命令。这个命令告诉浏览器他必须启动一个"webform2.aspx"页面的GET请求。

4.浏览器解释302命令并发送"webform2.aspx"的get请求。

enter image description here

换句话说,"server.transfer"由服务器执行,而"response.redirect"由THR浏览器执行。response.redirect"需要两个请求来重定向页面。

那么何时使用"server.transfer"以及何时使用"response.redirect"?

如果要导航位于同一服务器上的页面,请使用"server.transfer",如果要在位于不同服务器和域上的页面之间导航,请使用"response.redirect"。

enter image description here

下面是一个总结表,其中列出了不同之处,以及在哪种情况下使用。

enter image description here


服务器的优点。传输是您可以用它做的:

1
TextBox myTxt = (TextBox)this.Page.PreviousPage.FindControl("TextBoxID");

只要使用server.transfer而不是response.redirect,就可以使用上述方法从上一页获取任何内容。


除此之外,你还需要考虑搜索引擎的影响和再现。这个页面永久移动吗?暂时的?这是不同的。

See:response.Redirect vs."301 moved permanently":

We've all used Response.Redirect at
one time or another. It's the quick
and easy way to get visitors pointed
in the right direction if they somehow
end up in the wrong place. But did you
know that Response.Redirect sends an
HTTP response status code of"302
Found" when you might really want to
send"301 Moved Permanently"?

The distinction seems small, but in
certain cases it can actually make a
big difference. For example, if you
use a"301 Moved Permanently" response
code, most search engines will remove
the outdated link from their index and
replace it with the new one. If you
use"302 Found", they'll continue
returning to the old page...


转让是完全服务器的一侧。客户端地址酒吧常数。关于在请求之间传递上下文的一些复杂性。在一个HTPMOUDULTION的初始请求中,您可以在管道E.G.中的早期传输中扩展和恢复页面手柄。Read the MSDN docs carefully,and test and understand the new values of HTTPCONTEXT.Request-especially in postback scenarios.我们通常使用服务器,传输错误场景。

再一次以302个状态和客户端侧圆环响应与内部饮食的例外(小调服务器PERF HIT-取决于你一天做什么)来终止请求,然后导航到新地址。浏览器地址酒吧及历史更新等.客户国家的额外成本-成本变量取决于延迟。在我们的业务中,我们再说一遍,我们写了很多我们自己的模块,以避免例外的成本。


上面有很多不同之处。除此之外,还有一个区别。Response.Redirect()可用于将用户重定向到不属于应用程序的任何页面,但Server.Transfer()只能用于重定向应用程序内的用户。

1
2
3
4
5
//This will work.
Response.Redirect("http://www.google.com");

//This will not work.
Server.Transfer("http://www.google.com");

回答。Redirect is more costly since it address an extra trip to the server to figure out where to go.

Server.Transfer is more efficient,however it can be a little mis-leading to the user since the URL doesn't physically change.

在我的体验中,性能的差异并没有很大的影响到使用侧面方法。


response.redirect:通知浏览器可以在新位置找到请求的页面。然后,浏览器向新页面发起另一个请求,将其内容加载到浏览器中。这会导致浏览器发出两个请求。

传输:将执行从服务器上的第一页传输到第二页。就浏览器客户端而言,它发出了一个请求,初始页面是响应内容的页面。这种方法的好处是减少了从客户机浏览器到服务器的往返行程。此外,任何已发布的表单变量和查询字符串参数也可用于第二页。


服务器.Transfer doesn't change the URL in the client browser,so effectively the browser does not know you changed to another server-side handler.Redirect tells the browser to move to a different page,so the URL in the titlebar changes.

服务器.传输速度很慢,因为它避免了一轮传输给服务器,但URL的不改变可能是对你有利或不利的,取决于你想做什么。


关于transfer()的更多细节,它实际上是server.execute()+response.end(),其源代码如下(来自mono/.net 4.0):

1
2
3
4
5
public void Transfer (string path, bool preserveForm)
{
    this.Execute (path, null, preserveForm, true);
    this.context.Response.End ();
}

对于execute(),要运行的是给定路径的处理程序,请参见

ASP.NET does not verify that the current user is authorized to view the resource delivered by the Execute method. Although the ASP.NET authorization and authentication logic runs before the original resource handler is called, ASP.NET directly calls the handler indicated by the Execute method and does not rerun authentication and authorization logic for the new resource. If your application's security policy requires clients to have appropriate authorization to access the resource, the application should force reauthorization or provide a custom access-control mechanism.

You can force reauthorization by using the Redirect method instead of the Execute method. Redirect performs a client-side redirect in which the browser requests the new resource. Because this redirect is a new request entering the system, it is subjected to all the authentication and authorization logic of both Internet Information Services (IIS) and ASP.NET security policy.

-from MSDN


重定向涉及一次额外的往返旅行并更新地址栏。

server.transfer不会导致地址栏更改,服务器会用另一页的内容响应请求。

例如

响应。重定向:

  • 在客户端,浏览器请求一个页面http://initiallyrequestedpage.aspx
  • 在服务器上以302响应请求,并传递重定向地址http://anotherpage.aspx。
  • 在客户端,浏览器向地址http://anotherpage.aspx发出第二个请求。
  • 服务器上的响应内容来自http://anotherpage.aspx
  • 服务器传输:

  • 在客户端浏览器上,请求一个页面http://initiallyrequestedpage.aspx
  • 在服务器服务器上。传输到http://anotherpage.aspx
  • 在服务器上,对从http://anotherpage.aspx返回内容的http://initialryrequestedpage.aspx请求作出响应。
  • 响应。重定向

    优点:RESTful—它更改地址栏,地址可用于记录请求之间状态的更改。

    缺点:慢-客户机和服务器之间有一个额外的往返行程。当客户机和服务器之间存在大量延迟时,这可能会很昂贵。

    服务器传输

    优点:快。

    缺点:状态丢失-如果您正在使用服务器。传输以更改应用程序的状态以响应回发,如果重新加载该页,则该状态将丢失,因为地址栏将与第一个请求上的状态相同。


    响应。重定向response.redirect()会将您发送到一个新页面,更新地址栏并将其添加到浏览器历史记录中。在浏览器上,您可以单击"上一步"。它将请求重定向到服务器上的一些纯HTML页面或其他Web服务器。它在每次请求时都会导致额外的往返服务器。它不保留原始请求中的查询字符串和表单变量。它可以在浏览器中看到新的重定向URL,并在必要时将其标记为书签。反应。重定向只需向(HTTP302)浏览器发送一条消息。

    服务器传输server.transfer()不更改地址栏,我们无法回击。当用户不希望用户看到他要去的地方时,应该使用server.transfer()。有时在"加载"类型页上。它将当前页面请求传输到同一服务器上的另一个.aspx页面。它保留了服务器资源,避免了不必要的服务器往返。它保留查询字符串和表单变量(可选)。它不显示在用户Web浏览器中重定向请求的真实URL。传输发生在浏览器不知道任何信息的情况下,浏览器请求一个页面,但服务器返回另一个页面的内容。