Forward和Redirect的区别是面试经常被问的内容,下面详解5大Forward和Redirect的区别@mikechen
处理方式的区别
Forward(转发)
Forward是在服务器内部完成的跳转,也称为服务器端跳转。
当服务器收到Forward请求时,它会在服务器内部直接将请求转发到另一个资源,比如:另一个Servlet或JSP页面,然后将该资源的响应发送给客户端浏览器。
Redirect(重定向)
Redirect是一种客户端跳转方式,也称为客户端重定向。
当服务器收到Redirect请求时,它会发送一个特殊的HTTP响应,比如:状态码为302或其他重定向代码。
告诉客户端浏览器应该访问新的URL地址,然后,客户端浏览器会发起新的HTTP请求,访问该新的URL。
响应过程的区别
Forward:
Forward是一次单独的HTTP请求-响应过程,从客户端的角度来看,它只发起了一次请求,URL地址栏保持不变。
Redirect:
Redirect是间接转发,实际上有两次HTTP请求,客户端发送请求给servlet1,servlet1调用Redirect方法,这时它需要通知浏览器。
然后浏览器再把请求发送给servlet2,servlet2处理完请求再把响应发回给客户端。
如下图所示:
请求-响应过程:Redirect涉及两次HTTP请求-响应往返过程。
地址栏的区别
Forward
Forward为服务器的直接跳转,客户端浏览器并不知道,地址栏内容不变,是服务器内部的动作。
Redirect
Redirect为客户端浏览器根据URL地址重新向服务器请求,地址栏会变,比如:请求的URI地址发生变化。
速度和性能的区别
Forward
由于Forward是在服务器内部进行的,没有额外的HTTP请求-响应往返,通常比Redirect更快,具有较低的性能开销。
Redirect
Redirect通常需要两次HTTP请求-响应往返,因此比Forward略慢一些,具有较高的性能开销。
使用场景和用途的区别
Forward
Forward通常用于需要在服务器内部共享请求信息,保持较快速度的情况。
Forward一般用于用户登录的时候,根据角色转发到相应的模块。
Redirect
Redirect通常用于需要将客户端浏览器重定向到新的URL地址,或者需要在不同的HTTP请求-响应周期之间传递信息的情况。
比如:在提交表单后,服务器使用Redirect将用户重定向到另一个页面,以避免浏览器刷新时导致表单的重复提交。
总结:
1.forward是服务器端的转向而redirect是客户端的跳转。
2.使用forward浏览器的地址不会发生改变,而redirect会发生改变。
3.forward是一次请求中完成,而redirect是重新发起请求。
4.forward是在服务端完成,而不用客户端重新发起请求,效率较高。