java中的请求转发-forward,与请求重定向-redirect的区别
一、定义区别:
1、forward(转发):
仅发生在服务端程序内部,当服务器收到客户端请求,先将请求转发给目标地址,再将目标地址返回的结果转发给客户端。客户端并不清楚服务端发生的情况,在页面客户端只会看到一个展示结果以及一次的访问(一次访问)。
2、redirect(重定向):
客户端发起请求至服务端,服务器接收到请求,会给客户端返回一个临时响应头,这个临时响应头会记录了需要被重定向的地址,客户端会再次发起请求至需要重新访问的地址(二次访问)。
二、真正访问目标的请求方不同:
1、forward转发是请求进入至服务端,而后由服务端再次发起请求至最终url,所以对于真正访问的目标而言,请求方是服务器;
2、redirect重定向则是请求进入至服务端,服务端返回一个响应结果,然后客户端依据响应结果重新发起请求至最终的url,真正的请求方是客户端。
三、客户端发起的请求次数不同:
即根据上述定义:
1、forward转发 - 发起一次请求;
2、redirect重定向 - 发起两次请求。
四、页面展示最终的URL不同:
1、forward转发 - 请求转发指向的目标虽然变化,但是页面url不会发生变化,因为客户端不会感知转发操作;
2、redirect重定向 - 请求转发指向的目标会发生变化,当一次请求发生后,服务端返回结果后,客户端会立即进行二次请求,表现在页面的url会发生变化。