博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Server.Transfer和Response.Redirect
阅读量:2385 次
发布时间:2019-05-10

本文共 2152 字,大约阅读时间需要 7 分钟。

在实现页面跳转的时候,有些人喜欢用Response.Redirect,而有些人则喜欢用Server.Transfer。大部分时间似乎这两种方法都可以实现相同的功能,那究竟有区别吗?

        查了些文档,发现两者区别还是很明显的。根本上,Response是叫浏览器去重新转向到指定的网页,而Server自然是发生在服务器端为主了,因此会有以下区别:

1. Server.Transfer只能够转跳到本地虚拟目录指定的页面,而Response.Redirect则十分灵活;
2. Server.Transfer可以将页面参数方便传递到指定页面;
3. 使用时,Server.Transfer跳到别的页面后,浏览器显示的地址不会改变,有时反而会造成误会,当然也有些场合需要这样的效果;
4. Server.Transfer可以减少客户端对服务器的请求;

 

1、浏览器ASP文件请求->服务器执行->遇到response.redirect语句->服务器发送response.redirect后面的地址给客户机端的浏览器->浏览器请求执行新的地址

2、浏览器ASP文件请求->服务器执行->遇到Server.Transfer语句->服务器转向新的文件

切换对象:

1、Response.Redirect可以切换到任何存在的网页。浏览器去重新转向到指定的网页,产生往返。

2、Server.Transfer只能切换到同目录或者子目录的网页。Server.Transfer可以减少客户端对服务器的请求;

数据保密:

1、Response.Redirect后地址会变成跳转后的页面地址。安全性方面:由于该方法是通过客户端执行的,所以容易被欺骗和篡改。

2、Server.Transfer后地址不变,隐藏了新网页的地址及附带在地址后边的参数值。具有数据保密功能。

传递的数据量(网址后附带的参数):浏览器显示的地址不会改变。

1、Response.Redirect能够传递的数据以2KB为限。

2、传递的数据超过2KB时,务必使用Server.Transfer。

Server.Transfer 是一种从当前的asp页面控制另外一个asp页面的新的方法。调用 Server.Transfer 方法,立即终止执行第一页并且开始执行第二页。 如果第一页开始写入响应缓冲区, 第二页追加内容到缓冲区而不是替换它。如果缓冲是打开, 该方法将修改 HTTP 头,除非尚没有内容已被发送.如果 ASP 缓冲关闭, HTTP 头将不修改.

Server.Transfer可以用来替代Response.Redirect方法.   Server.Transfer 是在同一个应用程序内将教本控制权转交给新的页面 ,不能跨应用程序,更不能跨站点,跨服务器。如果要跨服务器,必须使用response.redirect。 根本上,Response是叫浏览器去重新转向到指定的网页,而Server自然是发生在服务器端为主了。如果Server.Transfer转移的目标页应是同一应用程序中的另一 Web 窗体页(.aspx 页)。不能使用 Server.Transfer 重定向到 .asp 或 .asmx 页。

还有,Server.Transfer方法还有两个个参数的重载方法—— "preserveForm"如果你将其设置为True(默认情况是False), 使用一个状态比如:Server.Transfer("WebForm2.aspx", True), 现存的请求字符串和所有的Form里的变量将被保持并提交到你的目标页。但是必须注意的是,这里有一个奇怪的Bug(微软为什么有这样 的Bug)。当你使用两个参数的重载方法试图迁移form和请求字符

串的时候会有可能产生错误。非官方的解决办法是将要被跳转的画面的enableViewStateMac

的属性设置为 True , 然后再设回 False.

举例说明:   

假设你想在执行了一些处理后将用户重新定位到另外一个新的URL.     如果是在AS 2.0中,你的执行过程是这样的,先执行你的处理过程然后使用 Response.Redirect将用户重新定位到url。使用这种方法的问题是Response.Redirect    太过于臃肿了 就是执行效率太低下)- 因为这种方式是首先要给客户端的浏览器发送一个   消息,告诉浏览器现在需要重新定位到一个新的url了.然后浏览器在读取了这个 请求后,再给服务端返回一个信息,请求服务端把自己定位到那个url中去,最后服务端才会处理这个新的请求并把html传递给客户端。

从上面的过程中可以看出,一个Response.Redirect导致了大量的网络通讯。而Server.Transfer就是为了解决这个问题而出现的,它可以简单的理解为服务端的url重新定位,也就是说,它是直接在服务端就可以重新定位url的,而不必和客户端进行 过多的通讯,从而能够避免加重网络通讯。 下面是一个简单的例子:  

'执行你所需要的处理过程

...

'将用户重新定位到DoneProcessing.asp

Server.Transfer "/scripts/DoneProcessing.asp

转载地址:http://gljab.baihongyu.com/

你可能感兴趣的文章
php设计模式
查看>>
git与github在ubuntu下的使用
查看>>
css pie.htc使用总结
查看>>
python包含中文字符串长度
查看>>
sysbench 0.5 性能测试工具使用手册
查看>>
通过telnet连接查看memcache服务器
查看>>
django不用在数据库中创建新的user表而使用它的后台管理功能
查看>>
php array_unshift()修改数组key
查看>>
mysql性能优化-查询(Query)优化-2
查看>>
MySQL分区表的使用
查看>>
MongoDB 地理位置索引的实现原理
查看>>
MongoDB与MySQL的插入、查询性能测试
查看>>
深入理解OAuth2.0协议
查看>>
https原理:证书传递、验证和数据加密、解密过程解析
查看>>
MySQL在大型网站的应用架构演变
查看>>
sphinx教程1__mysql sphinx引擎插件式热安装
查看>>
sphinx教程2__安装、配置和使用
查看>>
ttserver 缓存使用和过期设置
查看>>
php pconnect 长连接原理
查看>>
php memcached使用中的坑
查看>>