重定向和转发的区别

参考博客:https://www.cnblogs.com/Qian123/p/5345527.html

重定向:
1、是客户端行为,浏览器请求服务器成功后,获取到302状态码,重新请求新的url,并且地址栏会变化
2、不会携带已有的reauest参数
3、一般在退出登录销户时进行重定向
4、而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失
5、过程:客户浏览器发送http请求----》web服务器接受后发送302状态码响应及对应新的location给客户浏览器--》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址----》服务器根据此请求寻找资源并发送给客户。在这里 location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

转发:
1、是服务器行为,浏览器请求服务器成功后,服务器返回目标url的内容,而浏览器本身不知道内容是什么,并且状态栏地址不会变化,它只知道最开始请求的A地址是xxx,B C D就不知道了(302 Found,原始描述短語為 Moved Temporarily,是HTTP協定中的一個狀態碼。可以簡單的理解為該資源原本確實存在,但已經被臨時改變了位置;換而言之,就是請求的資源暫時駐留在不同的URI下)
2、会共享已有的request参数
3、一般在登录成功之后,转发相应的功能业务所在的资源上
4、只能转发到同一web路径下的url上
5、过程:客户浏览器发送http请求----》web服务器接受此请求--》调用内部的一个方法在容器内部完成请求处理和转发动作----》将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。

两者的内部机制有很大的区别:
1 请求转发只能将请求转发给同一个WEB应用中的组件,
而重定向还可以重新定向到同一站点不同应用程序中的资源,甚至可以定向到一绝对的URL。
2 重定向可以看见目标页面的URL,
转发只能看见第一次访问的页面URL,以后的工作都是有服务器来做的。
3 请求响应调用者和被调用者之间共享相同的request对象和response对象,
重定向调用者和被调用者属于两个独立访问请求和响应过程。
4 重定向跳转后必须加上return,要不然页面虽然跳转了,
但是还会执行跳转后面的语句,
转发是执行了跳转页面,下面的代码就不会在执行了。

你可能感兴趣的:(重定向和转发的区别)