请求转发和重定向的区别和工作原理

在上一篇文章中,用到了请求转发和重定向,但是,我仅仅只是知道他俩是怎么用的,有哪一些区别,如果你问我为什么,我也是懵逼的,现在给大家整理一下他们的区别和使用,最后来说明为什么。
先上个栗子。

重定向:
在这里插入图片描述
想必大家都用过,直接会重定向到main.html页面,而且重定向是二次转发,不会带原来的参数,地址栏也会改变。
这是为什么呢?我们来分析它的工作原理。

HTTP协议规定了一种重定向机制,重定向的运作流程如下:
(1)用户在浏览器端输入特定URL,请求访问服务器端的某个组件。
(2) 服务器端的组件返回一个状态码为302的响应结果,该响应结果的含义为:
让浏览器端再请求访问另一个Web组件,在响应结果中提供了另一个Web组件的URL。另一个Web组件有可能在同一个Web服务器上,也有可能不再同一个Web服务器上。
(3) 当浏览器端接收到这种响应结果后,再立即自动请求访问另一个Web组件。
(4) 浏览器端接收到另一个Web组件的响应结果。

这就是为什么重定向有上述特性的原因了。注意以下两点:源组件和目标组件不共享同一个ServletRequest对象,因此不共享请求范围内的共享数据。
如果以“/”开头,表示相对于当前服务器根路径的URL,如果以http://开头,表示一个完整的URL。

在这里插入图片描述
我们接着来分析请求转发
先上图
在这里插入图片描述
我们先说一下它的特性和用法再来分析它的工作原理
请求转发地址栏不变,可共享request域中的数据。只发送一次请求,/后的path路径既可以是绝对路径也可以是相对路径。基本上就是这个常用的特性。我们来看看它的工作流程。

先上个图吧,比较一目了然
在这里插入图片描述
我们客户端发送一次请求,只有目标组件得到的响应结果才会被返回给客户端。也就是说服务器会自动给我们处理后面的请求。因此无论转发多少次,还是同一个request对象。

别人要是问你我觉得你现在应该回答的上来了吧。

发布了37 篇原创文章 · 获赞 8 · 访问量 5250

猜你喜欢

转载自blog.csdn.net/weixin_42714605/article/details/104816172