重定向与转发的区别

重定向(客户端行为)过程

  客户端浏览器发送http请求-->web服务器接收后发送302状态码响应及对应新的地址给客户浏览器-->客户端浏览器发现是302响应,则自动再发送一个新的http请求,请求新的url地址-->服务器根据新的请求去寻找资源并发送给客户。

这里的地址可以重定向到任意的url,既然是浏览器重新发送请求,则不存在request传递的概念。在客户端浏览器路径显示的是重定向后的路径,客户能观察到地址的变化。重定向行为是浏览器做了至少两次访问请求。(后端代码如:response.sendRedirect("xxx.jsp"));

 

转发(服务器行为)过程:

  客户端浏览器发送http请求-->web服务器接收此请求后调用内部的方法在容器内部完成请求处理和转发动作-->将目标资源发生给客户。

转发的路径必须是同一个web容器下的url,其不能转向到其他web路径上去,中间传递的是自己容器内的request。在客户端浏览器地址栏中的地址不会发生变化,显示的仍然是其第一次访问的路径。转发行为是浏览器只做了一次访问请求。(后端代码如:request.getRequestDispatcher("xxx.jsp").forward(request,response))。

 

两者形象的示例:(假使你要去办理某个证照)

重定向:你先去了A局,A局的人说:“这个事情不归我们管,去B局”,然后你就从A局退出来,自己去了B局;

转发:你先去了A局,A局看了以后,知道这个事情其实是B局办理的,但B局的人没有把你退回来,而是让你休息等会,自己去联系了B局的人让他们办好了给你送过来。

posted on 2019-12-05 09:56  24ming  阅读(385)  评论(0编辑  收藏  举报