Server.Transfer
和之间有什么区别Response.Redirect
?
- 每种都有哪些优缺点?
- 什么时候比另一个合适?
- 什么时候不合适?
Server.TransferRequest
而不是Server.Transfer
。
Server.Transfer
和之间有什么区别Response.Redirect
?
Server.TransferRequest
而不是Server.Transfer
。
Answers:
Response.Redirect
只需向浏览器发送一条消息(HTTP 302)。
Server.Transfer
发生这种情况时浏览器不知道任何内容,浏览器请求一个页面,但是服务器返回了另一个页面的内容。
简而言之:Response.Redirect
仅告诉浏览器访问另一个页面。Server.Transfer
有助于减少服务器请求,保持URL不变,并且通过一点点调试就可以传输查询字符串和表单变量。
我发现并同意(来源)的内容:
Server.Transfer
相似之处在于它使用诸如的语句将用户发送到另一个页面Server.Transfer("WebForm2.aspx")
。但是,该声明具有许多明显的优点和缺点。首先,使用转移到另一个页面可以
Server.Transfer
节省服务器资源。它没有告诉浏览器重定向,而只是更改了Web服务器上的“焦点”并传输了请求。这意味着您不会收到太多的HTTP请求,因此减轻了Web服务器的压力,并使您的应用程序运行得更快。但是请注意:因为“传输”过程只能在服务器上运行的那些站点上工作;您不能使用
Server.Transfer
将用户发送到外部站点。只能Response.Redirect
这样做。其次,
Server.Transfer
在浏览器中维护原始URL。尽管在调试时可能会造成混乱,但这确实可以帮助简化数据输入技术。不仅如此:该
Server.Transfer
方法还具有第二个参数-“ preserveForm”。如果True
使用诸如这样的语句将其设置为Server.Transfer("WebForm2.aspx", True)
,则现有查询字符串和任何表单变量仍可用于您要转移到的页面。例如,如果您的WebForm1.aspx具有一个名为TextBox1的TextBox控件,并且您将其saveForm参数设置为True转移到WebForm2.aspx,则可以通过引用检索原始页面TextBox控件的值
Request.Form("TextBox1")
。
maintaining the original URL... ...really help streamline data entry techniques
?
Response.Redirect()
在以下情况下应使用:
Server.Transfer()
在以下情况下应使用:
执行页面时,“ 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”,页面的生命周期开始。但是在页面的整个生命周期完成之前,“ WebForm2”发生了“ Server.transfer”。
3.创建“ Webform2”页面对象,执行整个页面生命周期,然后将输出的HTML响应发送到浏览器。
在“ Response.Redirect”中,以下是导航事件的顺序:-
1.客户端(浏览器)向页面发送请求。在下图中,请求被发送到“ WebForm1”,我们想导航到“ Webform2”。
2.“ Webform1”的生命周期开始执行。但是在生命周期之间会发生“ Response.Redirect”。
3.现在,他不再向服务器执行重定向,而是向浏览器发送HTTP 302命令。此命令告诉浏览器他必须向“ Webform2.aspx”页面发起GET请求。
4.浏览器解释302命令并发送“ Webform2.aspx”的GET请求。
换句话说,“ Server.Transfer”由服务器执行,而“ Response.Redirect”由浏览器执行。“ Response.Redirect”需要对两个请求进行页面重定向。
那么什么时候使用“ Server.Transfer”以及什么时候使用“ Response.Redirect”?
当您要浏览位于同一服务器上的页面时,请使用“ Server.Transfer”;当您要在位于不同服务器和域上的页面之间进行导航时,请使用“ Response.Redirect”。
以下是汇总表,其中列出了差异以及使用哪种方案。
Server.Transfer
: 同一台服务器还是同一台IIS网站?
Server.Transfer的美丽之处在于您可以使用它:
TextBox myTxt = (TextBox)this.Page.PreviousPage.FindControl("TextBoxID");
只要使用Server.Transfer而不使用Response.Redirect,就可以使用上述方法从上一页中获取任何内容。
除了ScarletGarden的评论外,您还需要考虑搜索引擎和重定向的影响。此页面是否已永久移动?暂时?这有所作为。
请参阅:Response.Redirect与“ 301永久移动”:
我们都曾经使用过Response.Redirect。如果访客以某种方式落在错误的地方,这是使访客指向正确方向的快速简便的方法。但是,当您可能真的想发送“ 301已永久移动”时,您是否知道Response.Redirect发送HTTP响应状态代码“ 302 Found”?
区别似乎很小,但在某些情况下,实际上可以有很大的不同。例如,如果您使用“ 301永久移动”响应代码,则大多数搜索引擎将从其索引中删除过时的链接,并将其替换为新的链接。如果您使用“找到的302”,他们将继续返回旧页面...
传输完全在服务器端进行。客户地址栏保持不变。有关请求之间上下文传输的一些复杂性。刷新和重新启动页面处理程序可能会很昂贵,因此在管道中尽早进行传输,例如在BeginRequest期间在HttpModule中进行传输。仔细阅读MSDN文档,测试并了解HttpContext.Request的新值-特别是在回发场景中。对于错误情况,我们通常使用Server.Transfer。
重定向以302状态终止请求,并且客户端往返响应带有内部错误(内部服务器性能下降-取决于您每天执行多少次操作),然后客户端导航到新地址。浏览器地址栏和历史记录更新等。客户端支付额外的往返费用-费用随延迟而变化。在我们的业务中,我们重定向了很多东西,我们编写了自己的模块,以避免出现异常费用。
关于Transfer()的更多细节,实际上是Server.Execute()+ Response.End(),其源代码如下(来自Mono / .net 4.0):
public void Transfer (string path, bool preserveForm)
{
this.Execute (path, null, preserveForm, true);
this.context.Response.End ();
}
对于Execute(),要运行的是给定路径的处理程序,请参见
ASP.NET不会验证当前用户是否有权查看Execute方法提供的资源。尽管ASP.NET授权和身份验证逻辑在调用原始资源处理程序之前运行,但是ASP.NET直接调用Execute方法指示的处理程序,并且不会为新资源重新运行身份验证和授权逻辑。如果您的应用程序的安全策略要求客户端具有访问资源的适当权限,则应用程序应强制进行重新授权或提供自定义访问控制机制。
您可以通过使用Redirect方法而不是Execute方法来强制进行重新授权。重定向执行客户端重定向,浏览器在其中请求新资源。因为此重定向是进入系统的新请求,所以它要接受Internet信息服务(IIS)和ASP.NET安全策略的所有身份验证和授权逻辑。
- 来自MSDN
Response.Redirect涉及一次额外的往返并更新地址栏。
Server.Transfer不会导致地址栏更改,服务器使用另一页面的内容来响应请求
例如
响应重定向:-
Server.Transfer:-
响应重定向
优点: -RESTful-更改地址栏,该地址可用于记录请求之间的状态变化。
缺点:- 慢-客户端和服务器之间存在额外的往返路程。当客户端和服务器之间存在大量延迟时,这可能会很昂贵。
服务器传输
优点:- 快速。
缺点: -状态丢失-如果您使用Server.Transfer更改应用程序的状态以响应回发,则如果重新加载页面,则该状态将丢失,因为地址栏将与以前相同在第一个请求上。
Response.Redirect Response.Redirect()会将您发送到新页面,更新地址栏并将其添加到浏览器历史记录中。在浏览器上,您可以单击返回。它将请求重定向到我们服务器上的一些普通HTML页面或其他Web服务器。它会在每次请求时导致与服务器的其他往返。它不会保留原始请求中的查询字符串和表单变量。它使您能够查看新的重定向URL,并在浏览器中将其重定向到该URL(并在必要时将其添加为书签)。响应。重定向只是将消息向下发送到(HTTP 302)浏览器。
Server.Transfer Server.Transfer()不会更改地址栏,我们无法回击。当他/她不希望用户看到他要去的地方时,应该使用Server.Transfer()。有时在“正在加载”类型页面上。它将当前页面请求传输到同一服务器上的另一个.aspx页面。它可以保留服务器资源,并避免不必要的往返服务器。它保留查询字符串和表单变量(可选)。它不会在用户Web浏览器中重定向请求的位置显示真实URL。Server.Transfer发生在浏览器不知道任何内容的情况下,浏览器请求一个页面,但是服务器返回了另一个的内容。