HTTP中请求与转发的细节

09-HTTP-Request请求转发步骤和特点 在Java Web开发中,请求转发是指将一个HTTP请求从当前服务端资源发送到其他服务端资源进行处理的过程。请求转发的主要作用是实现Web应用程序内不同资源之间的数据共享和流程控制。通常情况下,请求转发是在服务器内部完成的,转发过程中客户端浏览器感知不到。因此,对于客户端而言,请求转发就好像是直接在当前服务端资源中处理请求一样,而不会意识到请求已经被转发到其他服务端资源进行处理。 阅读详情

首先我引用一篇认为能比较好的解释这两个概念的区别原作者地址
一、调用方式

我们知道,在servlet中调用转发、重定向的语句如下:

request.getRequestDispatcher(“new.jsp”).forward(request, response); //转发到new.jsp

response.sendRedirect(“new.jsp”); //重定向到new.jsp

在jsp页面中你也会看到通过下面的方式实现转发:

<jsp:forward page="apage.jsp" />

当然也可以在jsp页面中实现重定向:

<%response.sendRedirect(“new.jsp”); %> //重定向到new.jsp

二、本质区别

解释一

一句话,转发是服务器行为,重定向是客户端行为。为什么这样说呢,这就要看两个动作的工作流程:

转发过程:客户浏览器发送http请求——》web服务器接受此请求——》调用内部的一个方法在容器内部完成请求处理和转发动作——》将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。

重定向过程:客户浏览器发送http请求——》web服务器接受后发送302状态码响应及对应新的location给客户浏览器——》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址——》服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

解释二

重定向,其实是两次request

第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。

例子:

response.sendRedirect(“loginsuccess.jsp”);

请求转发是服务器内部把对一个request/response的处理权,移交给另外一个

对于客户端而言,它只知道自己最早请求的那个A,而不知道中间的B,甚至C、D。传输的信息不会丢失。

例子:

   RequestDispatcher dis=request.getRequestDispatcher(“loginsuccess.jsp”);

   Dis.forward(request,response);

解释三

假设你去办理某个执照

重定向:你先去了A局,A局的人说:“这个事情不归我们管,去B局”,然后,你就从A退了出来,自己乘车去了B局。

转发:你先去了A局,A局看了以后,知道这个事情其实应该B局来管,但是他没有把你退回来,而是让你坐一会儿,自己到后面办公室联系了B的人,让他们办好后,送了过来。

———————————————————我是分割线———————————————————————–

接下来我想解释下一些细节性的东西(关于缓冲区与头信息)

  • RequestDispatcher.forward方法只能将请求转发给方 法只能将请求转发给同一个WEB应用中的组件 ,而HttpServletResponse.sendRedirect方法还可以重定向到同一站点上的其它应用程序中的资源,甚至是使用绝对URL可以重定向到其它站点的资源。
  • 如果传递给HttpServletResponse.sendRedirect方法的相对URL以“/”开头,他是相当于服务器的根目录;如果创建RequestDispatcher对象时指定的相对URL以“/”开头,他是相当于当前web应用程序的根目录。
  • 调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏显示的URL会发生改变,由初始的URL地址变成重定向的目标URL调用RequestDispatcher.forward方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。
  • HttpServletResponse.sendRedirect方法对浏览器的请求之际做出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求:RequestDispatcher.forward方法在服务端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。
  • RequestDispatcher.forward方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;而 HttpServletResponse.sendRedirect方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。
  • 如果在RequestDispatcher.forward方法方法之前,在Servlet程序中写入的部分内容已经被真正地传送到了客户端,forward方法将抛出IllgalStateException异常。
  • 如果在调用forward方法之前向Servlet引擎的缓冲区(response)中写入了内容,只要写到缓冲区的内容还没有真正输出到客户端,forward方法就可以正常执行,原来写入到缓冲区中的内容将被resetBuffer(清空缓冲区),但是,已写入到HttpServletResponse对象中的响应头字段信息保持有效。
ffmpeg(一) ffmpeg+QT开发环境搭建 (exe 程序编译的时候只需要包含 xxx.dll.a 静态导入库,运行的时候才需要 xxx.dll 文件)这个 .pro 文件的配置,是指导程序编译的时候,可以找到对应的动态库。值得一提的是,在Windows中,静态链接库(Static Link Library)的扩展名也是.lib、.dll.a。其实只要你掌握了FFmpeg,也可以很快上手其他音视频开发库,因为底层原理都是一样的,你最终操作的都是一样的数据,比如MP3、MP4文件。导入库:不包含函数的具体实现代码(函数的具体实现代码存储在dll中) 阅读详情

相关推荐

告别版本过低提示!微信3.9登录修复与聊天记录无缝迁移全攻略

本文详细解析了微信3.9版本过低提示的根源,并提供了完整的修复方案和聊天记录迁移指南。通过专用修复工具绕过版本检测,以及新旧版本聊天记录目录对比,帮助用户实现无缝迁移。特别提醒备份重要数据,确保操作安全。

weixin_42535461的博客 3141

http请求转发、springboot请求转发、servlet转发请求

http请求转发、springboot请求转发、servlet转发请求

凌康的博客 1258

FlightStream实战:如何用面元法在笔记本电脑上完成无人机气动分析(附NASA案例)

本文详细介绍了如何利用FlightStream面元法在笔记本电脑上高效完成无人机气动分析,包括其核心技术优势、NASA D8案例实战解析及高效工作流建立。FlightStream作为快速CFD分析工具,显著提升了早期设计阶段的迭代速度,适用于概念设计验证和多气动构型比较。

weixin_28363123的博客 258

Java转发(forward)与重定向(redirect)

1.从地址栏显示来说 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址. redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新...

chubie3528的博客 524

从零解析:富斯i6遥控器与STM32的IBUS协议通信实战

本文详细解析了富斯i6遥控器与STM32通过IBUS协议通信的实战指南,涵盖硬件准备、协议解析、驱动实现及常见问题解决。特别适合机器人及智能小车开发者,提供低成本、高可靠性的无线控制方案,助力快速实现多通道控制功能。

weixin_29193359的博客 440

直流电源滤波电路的设计与优化:从基础原理到高效应用

本文深入探讨直流电源滤波电路的设计与优化,从基础原理到高效应用全面解析。重点介绍电容滤波和电感滤波的工作原理及实战设计要点,分享复合滤波电路的进阶技巧,并提供常见问题排查指南。文章还涵盖现代滤波技术的新发展,如有源滤波和数字控制滤波的应用,帮助工程师提升电源系统的稳定性和效率。

weixin_29255731的博客 175

nginx转发http,websocket,https请求配置

nginx转发http,websocket,https

scdnzzb的博客 4945

【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Pytorch-DirectML篇)】

这篇是之前Tensorflow-DirectML的姊妹篇,如果对TF感兴趣的可以搜索我的博文。 首先我们丢一个官网地址,但是官网那个会误导新人如果你按那个操作的话。 https://docs.microsoft.com/en-us/windows/ai/directml/gpu-pytorch-windows 这里用我的方法操作: 首先声明一下,因为我的显卡是AMD RX6600,不带XT(性能和RTX3060 12G版本半斤八两),所以目前没有最新的WSL2驱动,如果有了的话欢迎告知我,所以我这里就.

weixin_44029053的博客 2万+

httpclent post get 请求 转发文件流

import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; import o...

iteye_5220的博客 1044

Unreal5从入门到精通 专栏目录

欢迎来到“UE5从入门到精通”专栏!在这里,我们将带您踏上一段精彩的旅程,深入探索虚幻引擎5(Unreal Engine 5)的无限可能。不论您是游戏开发的新手,还是希望提升技能的开发者,这里都有适合您的内容。基础知识:了解虚幻引擎5的界面、功能和基本操作,为您的学习打下坚实的基础。项目实战:通过实际项目案例,帮助您从理论走向实践,真实体验游戏开发的每个环节。高级技巧:分享各种高级功能和技巧,包括蓝图、C++编程、材质编辑、光照和渲染等,让您能够创作出更具专业水准的作品。

TxNet 2987

Matlab仿真:均匀面阵方向图、均匀线阵方向图、均匀圆阵方向图

其中,阵列方向图是评价阵列性能的重要参数之一。均匀面阵由若干个相同的阵元构成,阵元间等距排列,阵元的方向图形状为一个圆盘。均匀线阵由若干个相同的阵元构成,阵元间等距排列,阵元的方向图形状为一个矩形。本文将采用Matlab进行仿真,分别实现均匀面阵方向图、均匀线阵方向图和均匀圆阵方向图,并对三种阵列进行比较分析。通过以上代码仿真,我们可以对均匀面阵、均匀线阵和均匀圆阵进行方向图的绘制,进一步分析不同阵列在天线性能方面的差异。Matlab仿真:均匀面阵方向图、均匀线阵方向图、均匀圆阵方向图。

2301_79326857的博客 3436

servlet转发和重定向

请求转发:request.getRequestDispatcher(URL地址).forward(request, response) 处理流程: 客户端发送请求,Servlet做出业务逻辑处理。 Servlet调用forword()方法,服务器Servlet把目标资源返回给客户端浏览器。   2)重定向:response.sendRedirect(URL地址) 处理流程: 客户端发送...

qq_41457412的博客 720

【项目实战】自动化测试软件VectorCAST介绍

VectorCAST是一款先进的自动化测试软件。VectorCAST是一款功能强大、易于使用的自动化测试软件。VectorCAST适用于各种嵌入式系统的测试。VectorCAST为嵌入式系统的测试提供了一种高效、可靠的解决方案。VectorCAST提供了一整套完整的测试工具,包括测试管理、代码覆盖、缺陷定位、报告生成等,以帮助开发人员提高测试效率,确保软件质量。VectorCAST支持。

奶爸的编程之路,也就一周冷个三天 2009

Servlet中重定向与转发

一、二者比较 二、重定向 三、转发

qq_2192330908的博客 241

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C#中HttpWebRequest上传文件请求转发与WebResponse响应解析

对外暴露一个上传文件的WebAPI给第三方使用,实现层面上,本质上是将请求转发到另外一个WebService,并处理它返回的结果,构造成指定的格式返回给第三方。 看代码: /// &lt;summary&gt; /// 测试:文件上传 /// &lt;/summary&gt; /// &lt;returns&gt;&lt;/ret...

a_dev的专栏 5044

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

http、tcp、ip、https

    ennn.....越学越觉得自己学的不够系统,好多东西自己还需要下一番功夫,虽然开了计算机网络这门课,当时也算是脑子里知道有这么一回事了,但真正的把相关技术应用起来确还是有一定距离的,所以最近又读了一本《图解HTTP》,有些收获,想要再次记录下来,也把之前的相关知识梳理下,方便自己日后回想查看反思。 一、先总结下面试经常问到的相关的计算机网络知识 TCP和UDP的区别 TCP面向连接...

zz0129的博客 889

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

java web学习第四天/2:javaweb中,路径分为相对路径和绝对路径,HttpServletResponse类的作用 请求转发 请求重定向

昨天的学习是看完了视频但是事情太多了,敲到两点有点顶不住,还有一点代码时间没有完成今天把昨天的补上吧,确实感觉后面如果要一点点详细的弄懂确实耗费的时间要多一点了,不过也挺充实的,向着大厂的目标一直学习,冲冲冲写个目录吧1、在javaweb中,路径分为相对路径和绝对路径两种:2、HttpServletResponse类的作用3、b)两个输出流的说明。5、请求转发的特点:6、解决respo响应回传字符串中文乱码问题7、请求重定向8、get post请求获取html页面的参数9、验证Servlet的base标签作

分享JAVA/ Python/ Ts学习路上的一些笔记,不足之处多多见谅。 468

http get 消息的作用是什么?_JavaWeb基础之Http

Http(Hyper Text Transfer Protocol ),超文本传输协议。传输协议定义了客户端和服务器端通信时发送数据的格式。Http协议具有以下特点:1. 基于TCP/IP的高级协议2. 默认端口号:803. 基于请求/响应模型的:一次请求对应一次响应4. 无状态的:每次请求之间相互独立,不能交互数据请求消息是客户端发送给服务器端的数据;响应消息是服务器端发送给客户端的数...

weixin_39532699的博客 236

Day 05请求与响应

标题

m0_54241777的博客 1499

探索HTTP————request和response对象

转载自:https://blog.youkuaiyun.com/xf616510229/article/details/53483472 什么是request和response request对象是服务器对浏览器请求的封装,而response是服务器对服务器响应的封装。 request用来取出请求信息,而response则用来添加要返回给浏览器的信息。 使用response对象设置http响应协议中的...

西门阿浪的博客 452

haproxy,能够实现将来自用户的80端口的http请求转发至后端8000上的server服务

部署配置haproxy,能够实现将来自用户的80端口的http请求转发至后端8000上的server服务,写出其配置过程。 HAPorxy 是免费的、极速且可靠的用于为TCP和基于HTTP应用程序提供高可用、负载均衡和代理服务的解决方案, 尤其适用于高负载且需持久连接或7层处理机制的web站点 软件特性:...

weixin_34054866的博客 866

JavaWeb之Request和Response

javaweb

qq_53558470的博客 1042

转发和重定向的区别

--请求次数 重定向是浏览器向服务器发送一个请求并收到响应后再次向一个新地址发出请求,转发是服务器收到请求后为了完成响应跳转到一个新的地址;重定向至少请求两次,转发请求一次。 --地址栏不同 重定向地址栏会发生变化,转发地址栏不会发生变化。 ...

qq_51761587的博客 103

Servlet和HTTP以及Request技能

JavaWeb相关知识 Servlet Http协议 Request Servlet 概念 步骤 执行原理 生命周期 Servlet3.0 注解配置 Servlet的体系结构 Servlet – 接口 | GenericServlet – 抽象类 GenericServlet : 将Servlet接口中其他的方法做了默认空实现,直将service()方法作为抽象 将来定义Servlet类...

笑三年-Dylen 209

Request对象&Response对象

Request 对象 request对象和response对象的原理: tomcat服务器会根据请求url路径,创建相对应的对象。 tomcat服务器,会创建request和response对象,request对象中封装请求消息数据。 tomcat将request和response两个对象传递给service方法,并且调用service方法 request和response对象都是由服...

o_Trey的博客 330

JavaWeb基础笔记之请求&响应

1.请求 请求:获取资源.在BS架构中,就是客户端浏览器向服务端发出询问. 请求对象:就是在项目中用于发送请求的对象.如:ServletRequest和HttpServletRequst(tomcat创建的,作用是封装来自客户端携带的信息) 1.1常用方法 1.1.1获取各种路径 获取虚拟目录名称 String getContextPath() 获取Servlet映射路径(资源路径) String getServletPath() 获取统一资源标识符(虚拟路径+资源路径) String getReq

weixin_47303159的博客 244
上一篇: JSTL中c:set详解
下一篇: Request与response对象
yrc_Note
博客等级 码龄11年 22粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值