自己最近做项目的时候,发现当我由一个页面向另一个页面发送request请求的时候,发现在后台是拿不到这个请求数据的,自己就觉得很奇怪,明明已经向后台发送了数据,怎么会拿不到呢?
向同学询问,经同学指点,知道了转发和重定向是有区别的。那么两者的区别是什么呢?
两者的简介
无论是转发还是重定向,都是实现页面跳转的方式:
重定向:重定向行为是做了两次请求,及产生了两个request对象,重定向会导致request对象信息丢失。
转发:转发做了一次请求, 浏览器的地址栏一直是第一次请求的地址。转发是服务器内部request/response控制权的移交。也就是转发后,浏览地址内容不变,转发可以以request作用域进行数据的传递。
? 具体讲解工作过程
重定向是客户端的行为,其含义是第一个页面通知浏览器发送一个新的页面请求,因此,当你使用重定向的时候,浏览器中显示的url即地址会变成新页面的url,与此同时,重定向的方式产生一个新的请求,故而经过一次重定向后,request内的对象将不能使用,也就是其内部对象将会失效。
不同于重定向,转发是服务器行为,服务端进行处理的时候将使用其内部的方法进行目标页面的调用,新的页面将继续处理同一个请求,而这个过程是不会被浏览器知道的。并且转发不同于重定向的一点在于转发不会改变url,也就是说能够保持request内的对象。
并且就实现页面的跳转的方式来看,转发的速率是大于重定向的。
之前自己为了实现将页面的请求发送到另一个页面,在试了重定向不可以的情况下,将变量放到了session等作用域,这样明显就是增大了变量的作用域,转发似乎更加符合我们最真实的情况。
? 区别
转发:实际上只有一次请求,而重定向实际上产生了两次请求。
转发的时候浏览器的地址不改变,而重定向时浏览器的上的网址改变。
小结
这些暂时是自己的一些理解,这些只是自己理论上的理解,实战篇请持续关注博客~