我听说java后端工程师经常会遇到一个面试题:重定向和转发的区别?两者的表象不同,原理也不同,接下来我会简单说说从表到里,两者的区别。
重定向
重定向的关键语句:
response.sendRedirect("http://zhoupq.com");
为什么需要重定向?有时可能不想自己处理响应,可以选择让其他服务处理响应,故将请求重定向到一个完全不同的URL。
重定向的工作原理?
简而言之,重定向就是servlet将新的URL返回给Location,浏览器获得Location值,访问新的URL。从时序图中可以看出,服务器只负责将新的URL注入Location,URL的转变是由浏览器完成的。
转发
转发也被称作请求分派,转发的关键语句:
RequestDispatcher view = request.getRequestDispatcher("http://zhoupq.com");
view.forward(request,reponse);
与重定向不同的是,转发的动作是在服务端完成,也就是说server直接将新的URL中的资源返回给浏览器,浏览器地址栏不变,用户察觉不到URL的转变。
现在可以轻而易举地回答开篇的问题:重定向时,地址栏会发生变化,因为URL的重定向由浏览器完成。