当前位置: 首页 > 后端技术 > Java

访谈攻略66:请求转发和请求重定向有什么区别?

时间:2023-04-01 13:26:22 Java

在Java中实现跳转有两种方式:请求转发和请求重定向,但是这两者是完全不同的,所以今天就来讨论一下。请求转发和请求重定向的主要区别包括以下5点:重定向方不同、数据共享不同、最终URL地址不同、代码实现不同、实现方式不同。接下来,让我们一一看看。1.定义不同的请求转发(Forward):发生在服务器程序内部。服务器收到客户端的请求后,首先将请求转发到目标地址,再将目标地址返回的结果转发给客户端。而client对这一切没有任何感知,就好像,张三(client)找李四(server)借钱,李四没钱,李四就去找王五借钱,然后把钱借给了张三。整个过程中,张三只借了一次钱,剩下的都是李四干的。这是转发请求。请求重定向(Redirect):请求重定向是指服务端收到客户端的请求后,会返回一个临时的响应头给客户端,临时响应头记录在其中,客户端需要重新发送请求(重定向)URL地址,客户端收到该地址后,会向新地址发送请求,这就是请求重定向。就好像张三(client)找李四(server)借钱,李四没钱,李四就对张三说,“我没钱,你去找王五借钱”,所以张三去找王无家借钱,这是请求重定向。2、请求者不同从上面请求转发和请求重定向的定义我们可以看出:请求转发是服务端的行为,服务端代替客户端发送请求,并将结果返回给客户端;而请求重定向是客户端的行为终端的行为和他们的交互过程如下图所示:3.不同的数据共享请求的转发是由服务端实现的,所以在整个执行过程中,客户端(浏览器)只需要发送一次请求,所以整个交互过程都使用同一个Request请求对象和一个Response响应对象,所以请求和返回的数据在整个请求过程中是共享的;而请求重定向客户端发送了两个完全不同的请求,所以这两个请求的数据是不同的。4、最终不同URL地址的请求转发是由服务器代请求完成,然后将结果返回给客户端,所以整个请求过程中URL地址不变;而请求重定向就是服务端告诉客户端,“你去另一个”访问“一个一个”,所以浏览器会再次重新发送请求,所以客户端最终显示的URL也是最后跳转的地址,不是最初请求的地址,所以URL地址变了。5、代码实现不同在SpringBoot中,请求转发的实现代码如下:@RequestMapping("/fw")publicvoidforward(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{request.getRequestDispatcher("/index.html").forward(request,response);}请求重定向的实现代码如下:@RequestMapping("/rt")publicvoidredirect(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException{response.sendRedirect("/index.html");}总结请求转发和请求重定向遵循“话少事大”的原则。更多的,它什么都不做,只是告诉客户端“你去别处访问”,这是理解这两个概念的关键。它们的区别主要体现在五点:定义不同、请求者不同、数据共享不同、最终URL地址不同、代码实现不同。References&Acknowledgmentswww.jianshu.com/p/81407dff803dwww.cnblogs.com/su-chu-zhi-151/p/11875641.html判断是非在自己,听别人说,得失看数字.公众号:Java面试真题分析面试合集:https://gitee.com/mydb/interview