HTTP中的重定向和请求转发的区别
二者通俗解释
假设你去办理某个执照,
重定向:你先去了A局,A局的人说:“这个事情不归我们管,去B局”,然后,你就从A退了出来,自己乘车去了B局。
页面跳转:转发
//java代码示例
request.getRequestDispatcher("xxx.jsp或者servlet").forward(request,response);
案例
地址栏不发生变化,显示的是上一个页面的地址 请求次数:只有1次请求 根目录:http://localhost:8080/项目地址/,包含了项目的访问地址 请求域中数据不会丢失
request.getRequestDispatcher("/地址").forward(request, response);
重定向
重定向过程:客户浏览器发送http请求----》web服务器接受后发送302状态码响应及对应新的location给客户浏览器–》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址----》服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。
-
客户端浏览器发送http请求 → web服务器接收后发送30X状态码响应及对应新的location给客户浏览器 → 客户浏览器发现是30X响应,则自动再发送一个新的http请求,请求url是新的location地址 → 服务器根据此请求寻找资源并发送给客户。
//java代码示例
response.sendRedirect("xxx.jsp或者servlet");
-
重定向,其实是两次request, 第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。
由浏览器端进行的页面跳转
特点:地址栏:显示新的地址 请求次数:2次 根目录:http://localhost:8080/ 没有项目的名字 请求域中的数据会丢失,因为是2次请求
