页面的重定向

对于 ASP 或者 ASP.NET,有两种方式可以将用户重定向到新页面:使用 Response.Redirect 和 Server.Transfer。它们两者的行为相当不同。

一、Response.Redirect

当使用 Response.Redirect 时,服务器程序会发送一个指令到浏览器,让浏览器取得一个新页面。用技术术语来说,它发送一个“320”HTTP状态代码,告诉浏览器当前页面已经移到了新位置。它也用这个指令发送新 URL,使浏览器了解接下来去取哪个页面。由于这种方式,实际上是客户机来重定向,因此新页面的URL(以及查询字符串)完全提供给了客户机。

二、Server.Transfer

与 Response.Redirect 相反,Server.Transfer 定向到服务器上的另一个页面,完全在服务器端进行。

如果要发出不同的页面,而又不想修改客户机的地址栏的话,用服务器端重定向就非常好。这样可以隐藏页面的URL(以及查询字符串)的细节,从而产生从用户的角度来看比较干净的URL。这通常用在创建所谓 URL 重写的情况中,其用来创建干净的 URL。例如,用户可能请求一个这样的页面:

http://www.myfootprints.cn/Cars/volvo/850/T5/

服务器在幕后可能转换为:

http://www.myfootprints.cn/Cars/ShowCar.asp?Make=843&Model=984&Type=7345

显然,第一个URL更容易理解和在浏览器中输入。它还让用户容易猜出符合相同模式的其他URL。例如,请求下面的页面:

http://www.myfootprints.cn/Cars/Volvo/V70/R

最后会出现显示 Volvo V70 R 的正确页面。

除了容易理解外,服务器端转换也可能稍稍加快一些站点的速度。不用向浏览器发送响应让它取得一个新页面,这样会产生一个对页面的新请求,可以直接将用户转到新页面,以节省一些网络开销。

服务器端转换用Server类实现。正如Request和Response对象提供了关于请求和响应的信息,Server对象提供了关于运行页面的服务器的信息。可以用它得到关于服务器名、它的IP地址等信息。它有一些方法,其中一个是执行服务器端转换的Transfer。

Server.Transfer只能用来重定向到站点内的其他页面。不能用它将用户转到不同域上的页面。如果试图这么做,服务器程序会出现错误。

Server.Transfer 不是指示浏览器取得一个新的页面,而是完全在服务器上发生。放弃老页面的输出,并启动要转换的页面的新页面生命周期。然后这个页面生成 它的内容,并发送回浏览器,而保留浏览器的地址栏不变。

Add comment

Loading