一、介绍
转发和重定向是两种常见的网页跳转方式
它们都能让用户从一个网页跳转到另一个网页。
二、转发
转发是通过服务器内部的转发机制实现的。
当服务器接收到一个请求后,根据请求的URL地址找到对应的资源,然后将该请求转发给另一个资源进行处理,最终将该资源的处理结果返回给客户端。
在这个过程中,客户端只知道自己访问了一个资源,而不知道这个资源是被转发到的。
转发时客户端只发送了一次Http请求
三、重定向
重定向是通过HTTP响应头中的Location字段实现的。
当服务器接收到一个请求后,发现该请求需要访问另一个资源才能得到响应,于是在HTTP响应头中设置Location字段,告诉客户端重新发送一个请求,访问另一个资源。
当客户端收到这个响应后,会根据Location中的地址重新发送一个请求,访问另一个资源,因此客户端会知道自己访问了两个资源。
重定向时客户端 发送了两次Http请求
四、转发和重定向的区别
1.可见性
转发对客户端是不可见的,而重定向对客户端是可见的。
当服务器通过转发将请求转发给另一个资源进行处理时,客户端只知道访问了一个资源,而不知道这个资源是被转发到的。
而当服务器通过重定向告诉客户端重新发送一个请求时,客户端会知道自己访问了两个资源。
2.速度
转发比重定向快。
因为转发是在服务器内部进行的,不需要向客户端发送HTTP响应头,也不需要客户端重新发送一个请求,因此速度比重定向快。
而重定向需要向客户端发送HTTP响应头,并告诉客户端重新发送一个请求,然后客户端又会去请求一个新的资源,因此速度较慢。
3.访问受保护的页面
转发可以访问相对路径和绝对路径的资源,而重定向只能访问绝对路径的资源。
因为转发是在服务器内部进行的,所以可以访问当前服务器上所有资源,可以访问受保护的资源,比如WEB-INF下的资源
而重定向是在客户端进行的,只能访问被服务器对外开发的,允许的资源,不能访问比如WEB-INF下的资源
4.请求次数
转发只需要发送一次请求,而重定向需要发送两次请求。
因为转发是在服务器内部进行的,客户端只需要发送一次请求即可完成跳转。
而重定向需要向客户端发送HTTP响应头,并告诉客户端重新发送一个请求,因此客户端需要发送两次请求。