Web - 转发与重定向的区别
资源跳转的两个主要实现方式,一种是重定向,另一种是转发。
一、重定向(Redirect)---客户端行为
内部执行流程:
第一个ServletA接收到了浏览器端的请求,进行了一定的处理,然后给浏览器一个特殊的响应消息,这个特殊的响应消息会通知浏览器去发送一个请求request2,去访问另外一个资源ServletB,这个动作是服务器和浏览器自动完成的,最终由ServletB做出响应。
二、转发(Forward)---服务器行为
内部执行流程:
第一个ServletA接收到了浏览器端的请求,进行了一定的处理,然后没有立即对请求进行响应,而是将请求“交给下一个ServletB”继续处理,下一个ServletB处理完成之后对浏览器进行了响应。在服务器内部将请求“交给”其它组件继续处理就是请求的转发。
三、重定向与转发的区别
1)重定向访问服务器两次,转发只访问服务器一次
2)转发页面的URL不会改变,而重定向地址会改变
3)转发只能转发到内部的的web应用,重定向可以重定义到任意资源路径
4)转发相当于服务器跳转,相当于方法调用,属于同一次请求,前后共享一个request,可通过此来传递一些数据或者session信息,request.setAttribute()和 request.getAttribute()。而重定向会产生一个新的request,不能共享request域信息与请求参数
5)由于转发相当于服务器内部的方法调用,所以转发后面的代码仍然会执行(转发之后记得return);重定向代码执行之后是方法执行完成之后进行重定向操作,也就是访问第二个请求,如果是方法的最后一行进行重定向,那就会马上进行重定向(重定向也需要return)
6)转发时可以访问web-inf下的资源,重定向不允许【web-inf是指Java Web应用的安全目录,所谓安全就是客户端无法访问,只有服务端可以访问的目录】
四、重定向和转发的选择
1)重定向的速度比转发慢,一般情况下选择转发,节省资源。
2)如果在访问当前web的应用程序时,通常用转发;如何在访问不同web应用程序时,特别是要访问另外一个web站点上的资源时,就只能使用重定向。
五、总结
- 重定向是多次请求(由服务器重定向到客户端,由客户端请求下一个资源),是一种客户端行为,从本质上讲等同于两次请求,前一次请求对象不会保存,地址栏中的URL会改变(即调用response.sendRedirect方法)
- 转发是同次请求(由服务器请求下一个资源),是一种服务器行为,客户端只有一次请求,服务器端转发后会将请求对象保存,地址栏中的URL地址不会改变,得到响应后服务器端再将响应发给客户端(即调用request.getRequestDispatcher().forward方法)
一句话总结:重定向是由客户端发出请求 ,转发是由服务器发出请求。
附加:短链服务就是重定向(一般使用302临时重定向更好,因为302可统计点击次数用于分析数据,但会增加服务器压力)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2023-04-16 Golang - Option模式(2)(函数选项模式)
2023-04-16 Golang - Option模式(1)(函数选项模式)