zoukankan      html  css  js  c++  java
  • Response.Redirect、Server.Transfer、Server.Execute的区别

        以前很少用Transfer,今天即然用了,就仔细研究一下吧。

    1、Response.Redirect
        Response.Redirect方法导致浏览器链接到一个指定的URL。当Response.Redirect()方法被调用时,它会创建一个应答,应答头中指出了状态代码302(表示目标已经改变)以及新的目标URL。浏览器从服务器收到该应答,利用应答头中的信息发出一个对新URL的请求。
        这就是说,使用Response.Redirect方法时重定向操作发生在客户端,总共涉及到两次与服务器的通信(两个来回):第一次是对原始页面的请求,得到一个302应答,第二次是请求302应答中声明的新页面,得到重定向之后的页面。

    2、Server.Transfer   
        Server.transfer是IIS 5.0新增加的一个功能。它解决了Response.Redirect的两个重要的缺陷:
        1)在Response.Redirect中,我们得不到任何第一页的输出
        2)Response.Redirect会丢失request中的所有属性,当然我们可以通过一些其他的办法,比如session来搞定,可是有些页的参数是在request中传过来的,这样的话就不行了
        3) Response.Redirect需要client端再发起一个请求。
    server.transfer就很好地解决了这些问题。它是从server端直接向下一页发起请求,不需要client再次发送请求.如果你的网页非常依赖response.redirect,这个小小的改变可以提高将近25%的效率。(根据微软文档).
        Server.Transfer方法把执行流程从当前的ASPX文件转到同一服务器上的另一个ASPX页面。调用Server.Transfer时,当前的ASPX页面终止执行,执行流程转入另一个ASPX页面,但新的ASPX页面仍使用前一ASPX页面创建的应答流。
        如果用Server.Transfer方法实现页面之间的导航,浏览器中的URL不会改变,因为重定向完全在服务器端进行,浏览器根本不知道服务器已经执行了一次页面变换。
        默认情况下,Server.Transfer方法不会把表单数据或查询字符串从一个页面传递到另一个页面,但只要把该方法的第二个参数设置成True,就可以保留第一个页面的表单数据和查询字符串。
        同时,使用Server.Transfer时应注意一点:目标页面将使用原始页面创建的应答流,这导致ASP.NET的机器验证检查(MachineAuthentication Check,MAC)认为新页面的ViewState已被篡改。因此,如果要保留原始页面的表单数据和查询字符串集合,必须把目标页面Page指令的 EnableViewStateMac属性设置成False。
        server.Transfer()有一个不足就是:当用户在a.aspx中提交了一个表单,然后用Server.Transfer()进入 b.aspx,这时如果用户刷新一下页面,浏览器便会问用户是否“重试”发送表单,如果用户点击“是”,那么,表单中的数据被重新发送到服务器。如发送表单的作用就是为了向数据库中插入一条记录,结果导不希望发生的事——同一表单被多次加入到数据库中。
        Server.Transfer 有利于减少服务器请求,保持地址栏 URL 不变,允许你将 query string 和 form 变量传递到另一个页面

    3、Server.Execute
        Server.Execute方法允许当前的ASPX页面执行一个同一Web服务器上的指定ASPX页面,当指定的ASPX页面执行完毕,控制流程重新返回原页面发出Server.Execute调用的位置。
        这种页面导航方式类似于针对ASPX页面的一次函数调用,被调用的页面能够访问发出调用页面的表单数据和查询字符串集合,所以要把被调用页面Page指令的EnableViewStateMac属性设置成False。

    4、Redirect与Transfer区别:
         ● 执行过程
          Redirect:浏览器ASP文件请求->服务器执行->遇到Response.Redirect语句->服务器发送Response.Redirect后面的地址给客户机端的浏览器->浏览器请求执 行新的地址
          Transfer:浏览器ASP文件请求->服务器执行->遇到Server.Transfer语句->服务器转向新的文件

      ● 切换对象
          Redirect可以切换到任何存在的网页。
          Transfer:只能切换到同目录或者子目录的网页。

      ● 数据保密
          Redirect:后地址会变成跳转后的页面地址。
          Server.Transfer后地址不变,隐藏了新网页的地址及附带在地址后边的参数值。具有数据保密功能。

      ●传递的数据量(网址后附带的参数)
                Redirect:能够传递的数据以2KB为限。
            Transfer:传递的数据超过2KB时,务必使用Server.Transfer。

    5.Server.Execute和Server.Transfer区别:
        Execute是从当前页面转移到指定页面,并将执行返回到当前页面。
        Transfer是将执行完全转移到指定页面。


    参考来源:   

        http://www.cnblogs.com/3stones/archive/2008/03/20/1114645.html    
        http://webservices.ctocio.com.cn/net/188/8900188.shtml

  • 相关阅读:
    【crontab】误删crontab及其恢复
    New Concept English there (7)
    New Concept English there (6)
    New Concept English there (5)
    New Concept English there (4)
    New Concept English there (3)
    New Concept English there (2)Typing speed exercise
    New Concept English there (1)Typing speed exercise
    New Concept English Two 34 game over
    New Concept English Two 33 94
  • 原文地址:https://www.cnblogs.com/scottckt/p/2278015.html
Copyright © 2011-2022 走看看