《重定向与转发的区别》

发布时间:2024年01月14日

请求转发(Forward)和重定向(Redirect)的区别

key: 转发是服务端行为 重定向是客户端行为

转发如图所示(发生在服务端内部):

在这里插入图片描述

重定向如图所示(客户端行为):

在这里插入图片描述

结合上述图像可以更深刻的读懂下述文字

1,定义不同

请求转发(Forward):发生在服务端程序内部,当服务端收到一个客户端的请求之后,会先将请求转发给目的地址,最后再将目的地址返回的结果转发给客户端。客户端并不知情其中内部发生的事情。

请求重定向(Redirect):请求重定向指的是服务端接收到客户端的请求之后会给客户端一个临时响应头,这个响应头中记录了客户端需要再次发送请求的URL地址,客户端收到URL地址后,会将请求再次发送到这个新的地址上。

2,请求方不同

从上面请求转发和请求重定向的定义,我们可以看出:请求转发是服务器端的行为,服务器端代替客户端发送请求,并将结果返回给客户端;而请求重定向是客户端的行为,它们的交互流程,如上图所示。

3,数据共享不同

请求转发是服务端实现的,所以整个执行的流程中,客户端只需要发送一次请求,因此整个交互的过程中使用的都是同一个Request请求对象的一个Resspone响应的对象,在整个请求的过程中,请求和返回的数据是共享的。而请求重定向客户端发送两次完全不同的请求,所以两次请求中的数据是不同的。

4,最终URL地址不同

请求转发是服务端代为请求,再将结果返回客户端,整个URL地址不变。重定向是发送两次不同的请求,所以最终跳转的地址并非刚开始请求的地址,所以URL地址发生变化。

实现代码

//转发
@RequestMapping("/fw")
public void forward(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.getRequestDispatcher("/index.html").forward(request, response);
}
//重定向
@RequestMapping("/rt")
public void redirect(HttpServletRequest request, HttpServletResponse response) throws IOException {
    response.sendRedirect("/index.html");
}

借鉴 :https://www.51cto.com/article/714188.html

文章来源:https://blog.csdn.net/weixin_52485246/article/details/135577523
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。