请求转发和重定向之间的区别(请求转发与重定向到底有哪些区别?)
一. 前言
我们知道 ,Web开发中的页面跳转 ,通常有两种跳转方式:重定向与请求转发 。但可能有很多同学并不知道这两种跳转在细节上的区别 ,只知道都能跳转到目标页面 。但实际上这两种跳转方式深入研究后 ,你会发现有很多不同之处。接下来 ,壹哥就给大家梳理一下这两种跳转方式的具体区别 。
二. 两者的各自特点
两种跳转最大的区别在于 ,重定向是两次请求 ,每次都是从客户端发起;而请求转发是一次请求 ,是服务器发起的转发 。如下图所示:
给大家举一个生活中的案例:
重定向:我要找凤姐办事 ,凤姐说她完成不了,刘亦菲可以完成这件事 ,让我去找刘亦菲办事 。也就是说 ,我需要再重新发送一次请求,去找刘亦菲办事 。
请求转发:我要找凤姐办事 ,凤姐说她完成不了 ,她帮我找能完成这件事的人,然后完成了这件事 ,我只需要发一次请求即可 。
三. 具体区别
除了上述区别之外 ,重定向后 ,url路径会改变;转发不会改变url路径 ,还是原先的访问路径 ,在应用中往往增删改使用重定向 。比如我们在使用完增删改后 ,如果路径不改变 ,则继续刷新 ,会出现增删改异常;而查询需要使用转发 ,转发后,可实时变更使用request传值 。
然后是对内和对外跳转的区别 ,对于外部跳转 ,必须使用重定向,转发则不可对外跳转 。例如使用转发跳转到百度页面 ,是不允许的 。这是由转发特点所决定的 ,转发是一次跳转,两个不同服务器之间 ,是不可能共用同一个请求对象的。对内部安全页面跳转则必须使用转发 ,例如转发到内部WEB-INF下的安全页面 ,则必须使用转发 ,使用重定向则访问不了 。
另外关于在过滤器中的跳转应用 ,在过滤器中 ,如果使用转发后 ,则不会进入过滤器中 。因为转发是一次请求 ,进入服务器后 ,已经经过了过滤器。当进行转发后,没有重新发请求 ,则不会再进入到过滤器中 。如果是重定向 ,则是重客户端重新发的请求,则还是会进入过滤器 ,再访问目标资源 。
最后Web项目加入上下文路径 ,以及多级路径的跳转区别。如果加入了上下文路径,访问映射路径有多级的话 ,则不能使用相对路径进行跳转 ,需要使用绝对路径 ,也就是跳转路径前面必须加“/ ”标识 。使用重定向时 ,绝对路径是基于站点路径 ,没有带上下文路径 ,必须手动加上request.getContextPath() 。如果转发跳转 ,则绝对路径是基于上下文路径 ,无需加上下文路径 。
四. 总结
以上所述 ,就是重定向与转发的比较典型的几个特点与应用上的区别 。我们需要在使用跳转时,多加应用和练习 ,这样才能把这些区别都了解清楚 。现在你知道两者的区别有哪些了吗?如果你还有其他的答案 ,可以在评论区告诉我哦 。
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!