java web 请求过程经历了什么

本文详细阐述了Java Web请求的完整过程,包括域名解析、TCP/IP连接建立、浏览器发送数据、服务器处理、MyBatis缓存、数据持久化、JDBC操作、存储过程、索引创建,直至断开连接和浏览器解释数据。同时,探讨了SpringBoot配置文件加载顺序及@responseBody注解在Spring MVC中的应用,用于返回JSON或XML数据。
摘要由CSDN通过智能技术生成
执行流程
键入域名回车
域名解析
作用: DNS解析的作用是把域名解析成相应的IP地址,根据IP地址决定将报文发给谁。

浏览器开始解析域名,即查找过程.
浏览器自身DNS缓存(缓存一分钟,最大1000条左右)-->
操作系统自身DNS缓存-->
本机host文件映射-->
Windows调用53端口发送UDP请求
本地配置首选DNS服务器--> Root Server获取gTLD Server-->	
gTLD Server获取Name Server-->
Name Server获取子Name Server ... -->
Name Server返回IP地址给本机 -->
浏览器缓存结果 -->
结束
建立连接TCP/TP连接
准备:服务器启动,监听9999端口
客户端使用操作系统随机分配的端口号(1000~65535)与服务器的IP+端口号通过三次握手,建立连接(浏览器没有填写端口号默认为80)

TCP标志位,有6种标示:
SYN(synchronous建立联机)
ACK(acknowledgement 确认)
PSH(push传送)
FIN(finish结束)
RST(reset重置)
URG(urgent紧急)
Sequence number(顺序号码)
Acknowledge number(确认号码)
TCP状态标识:
LISTEN - 侦听来自远方TCP端口的连接请求; 
SYN-SENT -在发送连接请求后等待匹配的连接请求; 
SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认; 
ESTABLISHED- 代表一个打开的连接,数据可以传送给用户; 
FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;
FIN-WAIT-2 - 从远程TCP等待连接中断请求; 
CLOSE-WAIT - 等待从本地用户发来的连接中断请求; 
CLOSING -等待远程TCP对连接中断的确认; 
LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认; 
TIME-WAIT -等待足够的时间以确保远程TCP接收到连接中断请求的确认; 
CLOSED - 没有任何连接状态;

第一次握手:建立连接时,客户端发送syn包(syn=j ack=0 seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认; 
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
至此浏览器随机端口与服务器端口的TCP/IP连接建立成功

?:为何TCP建立连接需要三次握手,而不是两次,四次
第一次握手: A给B打电话说,你可以听到我说话吗?
第二次握手: B收到了A的信息,然后对A说: 我可以听得到你说话啊,你能听得到我说话吗?  
第三次握手: A收到了B的信息,然后说可以的,我要给你发信息啦! 
在三次握手之后,A和B都能确定这么一件事: 我说的话,你能听到; 你说的话,我也能听到。 这样,就可以开始正常通信了。
注意: HTTP是基于TCP协议的,所以每次都是客户端发送请求,服务器应答,但是TCP还可以给其他应用层提供服务,
即可能A、B在建立链接之后,谁都可能先开始通信。
如果两次,那么B无法确定B的信息A是否能收到,所以如果B先说话,可能后面的A都收不到,会出现问题 。
如果四次,那么就造成了浪费,因为在三次结束之后,就已经可以保证A可以给B发信息,A可以收到B的信息; B可以给A发信息,B可以收到A的信息。
浏览器发送数据
浏览器按照Line,Header,data,的格式封装HTTP请求报文
建立一个Socket对象
把http请求报文转变成byet[]字节
然后调用Socket.Sent()方法经TCP连接把这些数据打包发送到服务器

HTTP协议格式如下:
请求方法 URL 版本

Headers(K-V类型)

请求数据

注:考虑请求数据包大小与实际网络带宽,延迟,网络传输丢包等对并发量影响.
服务器接收数据
数据经过TCP连接传输过来以后
Coyote HTTP/1.1 Connector监听到请求,
创建 Request 和 Response 对象分别用于和请求端交换数据,创建新线程并传递 Request 和 Response 对象此线程,调用HttpPr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值