重定向与转发差异方面的小结

本文详细阐述了HTTP重定向与转发的过程及使用差异。重定向涉及客户端浏览器发送多个HTTP请求,而转发则通过服务器内部调用实现。此外,文章还讨论了两种方式对请求变量的影响及转发时相对路径可能导致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1)实现过程差异

重定向过程:客户浏览器发送http请求----》web服务器接受后发送302响应要求客户浏览器发送一个新的http请求----》客户端浏览器接受此响应后在发送一个新的http请求到服务器----》服务器根据此请求寻找资源并发送给客户
转发过程:客户浏览器发送http请求----》web服务器接受此请求后调用内部的一个方法在容器内部完成请求处理和转发动作----》将目标资源发送给客户

用户点击一个地址连接(采取重定向方式)后浏览器发送一个http请求(若请求页面附带参数则参数名/值随此http请求一同发送到服务器);经服务器处理后返回一个302响应通知客户端浏览器发送一个新的http请求,302响应内容见下图
........
location:
http://127.0.0.1:8080/result.jsp?username=foo&password=bar
........
上为服务器发送302响应中部分内容.说明见下:
(审视Location响应首部你将发现服务器通知了客户新的请求应该指向哪个URL,任何附加在原来请求之上的URL参数,都会出现在新的请求中,当浏览器发出新的请求时,这些参数也会跟着发送出去,只是参数值为NULL,这是因为当浏览器发送新的请求时前一请求中以“请求属性“存储的对象都将消失)
客户端浏览器接受到此302响应后立刻再发送一个新的http请求到服务器端,服务器接受此请求后寻找客户请求资源并发送到客户端。如此重定向的整个过程就全部完成。而进行转发时,目标页面是通过JSP容器的一个内部方法调用加以调用的(并非像重定向通过两次请求处理),新页面继续处理同一请求。
(2)使用差异
重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。速度较转发慢
转发:以前的request中存放的变量不会失效,两个页面共享同一个request作用域。除特殊几个采用重定向方式的动作外一般默认为转发方式

转发注意事项:
如果在JSP页面中使用相对路径来指向图象文件或其他资源,转发就可能会出现错误。因为浏览器并不知道转发已经发生,相对路径的源头依然是最初的servlet而非以转发的JSP。
例如:
目录A/a.jsp 目录B/b.jsp 目录B/c.png
假设a.jsp通过转发调用b.jsp,而b.jsp页面中使用相对路径调用c.png图象文件,则服务器肯定会报错,因为浏览器并不知道转发已经发生,仍然错处的认为c.png文件的相对路径的源头是a.jsp所在目录而非b.jsp所在目录。但重定向就不成在这样的问题。故一般使用绝对路径
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值