服务器之间的区别是什么。转移和响应。重定向?

它们各自的优点和缺点是什么? 什么时候一种比另一种更合适? 什么时候不合适?


当前回答

Response.Redirect()会将您发送到一个新页面,更新地址栏并将其添加到浏览器历史记录中。在浏览器上,您可以单击返回。

Server.Transfer()不会更改地址栏。你不能反击。

当我不想让用户看到我要去哪里时,我使用Server.Transfer()。有时在“加载”类型的页面上。

否则,我将总是使用Response.Redirect()。

其他回答

响应。重定向涉及一个额外的往返和更新地址栏。

服务器。传输不会导致地址栏更改,服务器会用来自另一个页面的内容响应请求

e.g.

响应。重定向:

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

服务器。转让:

在客户机上,浏览器请求一个页面http://InitiallyRequestedPage.aspx 在服务器上。转至http://AnotherPage.aspx 在服务器上,对http://InitiallyRequestedPage.aspx的请求做出响应,从http://AnotherPage.aspx返回内容

响应。重定向

优点:- RESTful -它改变地址栏,地址可以用来记录请求之间的状态变化。

缺点:- 慢——在客户端和服务器之间有一个额外的往返。当客户端和服务器之间存在大量延迟时,这样做的代价可能会很高。

服务器。转移

优点:- 快。

缺点:- 状态丢失-如果您正在使用服务器。转移来改变应用程序的状态以响应回贴,如果页面随后被重新加载,该状态将丢失,因为地址栏将与第一次请求时相同。

传输完全是服务器端的。客户端地址栏保持不变。请求之间上下文的传输有些复杂。刷新和重新启动页面处理程序可能是昂贵的,所以在管道的早期进行传输,例如在BeginRequest期间的HttpModule中。仔细阅读MSDN文档,并测试和理解HttpContext的新值。请求——特别是在回发场景中。我们通常使用服务器。转换为错误场景。

重定向以302状态终止请求,客户端往返响应并在内部吃掉一个异常(轻微的服务器性能打击-取决于你每天做多少)客户端然后导航到新地址。浏览器地址栏和历史更新等。客户端支付额外的往返费用-费用取决于延迟。在我们的业务中,我们重定向了很多,我们编写了自己的模块来避免异常成本。

”反应。重定向"和"服务器。“转移”有助于在页面执行时将用户从一个页面转移到另一个页面。但是他们进行这种转移/重定向的方式非常不同。

如果你是视觉爱好者,想看演示而不是理论,我建议你看看下面的facebook视频,它以更直观的方式解释了差异。

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

他们之间的主要区别是谁来转账。在“响应。重定向“传输是由浏览器在服务器中完成的”。“传输”是由服务器完成的。让我们试着以更详细的方式来理解这句话。

在“服务器。转让”以下是转让发生的顺序:-

1.用户向ASP发送请求。网络页面。在下图中,请求被发送到“WebForm1”,我们希望导航到“Webform2”。

2.服务器开始执行“Webform1”,页面的生命周期开始。但是在页面的整个生命周期完成之前。transfer”恰好是“WebForm2”。

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

在“回应”中。“重定向”下面是导航事件的顺序:-

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

2.“Webform1”的生命周期开始执行。但在生命周期之间。重定向”发生。

3.现在,他向浏览器发送HTTP 302命令,而不是服务器执行重定向。该命令告诉浏览器必须向“Webform2”发起GET请求。aspx页面”。

4.浏览器解释302命令并为“Webform2.aspx”发送一个GET请求。

换句话说就是“服务器”。服务器在响应时执行“传输”。“重定向”由浏览器执行。”反应。重定向”需要两个请求来做页面的重定向。

所以什么时候使用“服务器”。转移”以及何时使用“响应”。重定向”?

使用“服务器。当您想导航位于同一服务器上的页面时,请使用“响应”。重定向"当你想在不同服务器和域上的页面之间导航时。

下面是一个汇总表,其中列出了不同之处以及在哪个场景中使用。

Response.Redirect()应该在以下情况下使用:

我们希望将请求重定向到我们服务器上的一些普通HTML页面或其他web服务器 我们不关心在每个请求上引起到服务器的额外往返 我们不需要保留原始请求中的查询字符串和表单变量 我们希望我们的用户能够看到新的重定向URL,他在他的浏览器重定向(并能够收藏它,如果它的必要)

Server.Transfer()应该在以下情况下使用:

我们希望将当前页面请求传输到同一服务器上的另一个.aspx页面 我们希望保留服务器资源并避免到服务器的不必要的往返 我们想保留查询字符串和表单变量(可选) 我们不需要在用户的Web浏览器中显示我们重定向请求的真实URL

服务器。传输不会改变客户端浏览器中的URL,因此实际上浏览器并不知道您更改了另一个服务器端处理程序。响应。重定向告诉浏览器移动到另一个页面,因此标题栏中的url会发生变化。

服务器。传输稍微快一点,因为它避免了到服务器的一次往返,但不更改url可能对您有好处,也可能有坏处,这取决于您想要做什么。