简单说说重定向和转发哪一个会改变URL,为什么?

3,017 阅读1分钟
原文链接: zhoupq.com

  我听说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的重定向由浏览器完成。