1.从地址栏显示来说
forward
是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
2.从数据共享来说
forward:
转发页面和转发到的页面可以共享request里面的数据.
redirect:不能共享数据.
3.从运用地方来说
forward:
一般用于用户登陆的时候,根据角色转发到相应的模块.
redirect一般用于用户注销登陆时返回主页面和跳转到其它的网站等.
4.从效率来说
forward:
高.
redirect:低.
本质区别
forward过程
转发,服务器端行为。web服务器把接受的请求,调用内部的方法在容器内部完成请求处理和转发动作,然后响应客户端,在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。
redirect过程
重定向,客户端行为。客户端发送http请求,web服务器接受后发送3**状态码响应及对应新的location给客客户端,客户端发现是3**响应,则自动再发送一个新的http请求,请求url是新的location地址,在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。重定向行为是浏览器做了至少两次的访问请求的。
通俗的比喻
forward:
你先去A局办事,A局看了以后,知道这个事情其实应该B局来管,但是他没有把你退回来,而是让你坐一会儿,自己到后面办公室联系了B的人,让他们办好后,送了过来。
redirect:你先去了A局,A局的人说:“这个事情不归我们管,去B局”,然后,你就从A退了出来,自己乘车去了B局办。
进而带来的区别
forward方式
客户端肯定不知道啊,所以地址栏不变,中间过程加上其他参数地址栏也看不到,转发的url肯定不能是外部的,直接在服务器端内部的周转,所以request的参数能在新的方法里获取到,所以效率也比较高一些。
redirect方式就与其相反了!