首先,Response是让浏览器去重新转向到指定的网页,而Server自然是发生在服务器端。以下是三者的具体区别:重点是Server.Transfer和Response.Redirect的区别,可参考:
https://www.cnblogs.com/colder/p/4456986.html
https://blog.csdn.net/qiqibei666/article/details/86537627
以下是三者的具体区别:
(1)Server.Transfer方法:
Server.Transfer方法把执行流程从当前的ASPX文件转到同一服务器上的另一个ASPX页面。调用Server.Transfer时,当前的ASPX页面终止执行,执行流程转入另一个ASPX页面,但新的ASPX页面仍使用前一ASPX页面创建的应答流。
- server.Transfer()跳转只需要客户端和服务端一次通讯,跳转在服务端实现
- 因此并不会占用较多的 HTTP 请求,因此这可以减轻服务器的压力,使你的服务器运行更快
- server.Transfer()实现跳转,浏览器URL上并没有看到有重定向痕迹,且重定向完全在服务器端进行,浏览器根本不知道服务器已经执行了一次页面变换
- 如果用Server.Transfer方法实现页面之间的导航,浏览器中的URL不会改变,
- 使用server.Transfer()实现a页面到b页面的跳转,b页面可以接收a页面中的表单数据
- server.Transfer()只能从在同一服务器端的同一站点间运行,所以你不能用 Server.Transfer 将用户重定向到另一服务器上的站点。
(2)Response.Redirect:
Response.Redirect方法导致浏览器链接到一个指定的URL。当Response.Redirect()方法被调用时,它会创建一个应答,应答头中指出了状态代码302(表示目标已经改变)以及新的目标URL。浏览器从服务器收到该应答,利用应答头中的信息发出一个对新URL的请求。
- 需要客户端(浏览器)与服务端进行两次通信 :首先浏览器向客户端发送一次请求,浏览器接受请求返回一个302状态码和新的url,之后浏览器会对新的url发送一个请求,实现页面的跳转
- 跳转之后浏览器显示的url发生改变
- 使用response.redirect()从a页面跳转到b页面之后,就无法接收a页面中的表单中的数据
- response.redirect()可以从一个跨服务器跨站点跳转
(3)Server.Execute方法:
Server.Execute方法允许当前的ASPX页面执行一个同一Web服务器上的指定ASPX页面,当指定的ASPX页面执行完毕,控制流程重新返回原页面发出Server.Execute调用的位置。
这种页面导航方式类似于针对ASPX页面的一次函数调用,被调用的页面能够访问发出调用页面的表单数据和查询字符串集合,所以要把被调用页面Page指令的EnableViewStateMac属性设置成False。
总结:
Server.Transfer仅是服务器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;
Response.Redirect则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。
Server.Transfer是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。 这个过程中浏览器和Web服务器之间经过了一次交互。