导图社区 HTTP请求流程
学习计算机必须要知道的HTTP请求流程知识总结。一次完整的HTTP请求包括以下步骤:浏览器首先根据域名解析IP地址,其次建立TCP的3次握手,然后发起HTTP请求,再然后服务器响应HTTP请求,最后断开TCP连接,浏览器渲染页面呈现给用户。下图还有一些补充内容,如:TCP/IP、HTTP、Socket的区别,TCP与UDP等等。如有帮助,动动手指,点个赞!
社区模板帮助中心,点此进入>>
生产相关流程的顺序整理思维导图
海工产品建造流程
售后部们工作流程整理思维导图
自如业务流程思维导图
计算题思维流程
发货流程
清单
工作流程
电商运营订单流程
《作业训练营》服务交付流程
HTTP请求流程
1.域名解析
2.建立TCP连接
TCP三次握手
第一次握手 SYN=1,ACK=0
客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认
第二次握手 SYN=1,ACK=1
服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手 SYN=0,ACK=1
客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手
总结:
三次握手的建立连接是一个同步的过程,交换初始序列号,保证后续的每一个字节的可靠传输
3.发起http请求
1.请求行
1.请求方法
2.请求URL
3.http协议及版本
2.请求头
包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息
3.请求体
它将一个页面表单中的组件值通过param1=value1¶m2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1¶m2=value2”的方式传递请求参数。
此为详细结构图
4.响应http请求
1.响应行
1.http协议及版本
2.状态码及状态描述
状态码1xx
告诉客户端,请求收到,正在处理
状态码2xx
处理成功
状态码3xx
重定向到其它地方。它让客户端再发起一个请求以完成整个处理
状态码4xx
处理发生错误,责任在客户端,如客户端的请求一个不存在的资源,客户端未被授权,禁止访问等
状态码5xx
处理发生错误,责任在服务端,如服务端抛出异常,路由出错,HTTP版本不支持等
2.响应头
由多个属性组成
3.响应体
请求的响应数据
5.断开TCP连接
四次挥手
任何一方在没有数据要传送的时候,都可以发送一个FIN置位了的TCP数据段
当FIN被确认的时候,该方向上的连接被关闭
当双向连接都关闭了的时候,连接释放
补充
TCP/IP、Http、Socket的区别
1.TPC/IP协议是传输层协议,主要解决数据如何在网络中传输
2.socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口,比如create、listen、connect、accept、send、read和write等等
3.http协议对应的是应用层,是建立在TCP协议之上的一种应用
TCP粘包,拆包
粘包
接收端收到的数据包包含了发送端发送的两个数据包
拆包
接收端收到了两个数据包,但是这两个数据包是不完整的
发生的原因:
1.要发送的数据大于TCP发送缓存区剩余空间大小,将会发生拆包
2.待发送数据大于MSS(最大报文长度),TCP在传输前将进行拆包
3.要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包
4.接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包
解决方法
2.数据包之间设置边界,如添加特殊符号
TCP与UDP
TCP
TCP是基于字节流的,虽然应用层和TCP传输层之间的数据交互是大小不等的数据块,但是TCP把这些数据块仅仅看成一连串无结构的字节流,没有边界
UDP
UDP是基于报文发送的,从UDP的帧结构可以看出,在UDP首部采用了16bit来指示UDP数据报文的长度,因此在应用层能很好的将不同的数据报文区分开,从而避免粘包和拆包的问题
MSS和MTU
TCP抓包发现,当一次发送数据较大时,下层会把数据分成多个TCP包进行发送,每次发送1448字节的数据
(MTU)1500字节
MTU=1518(以太网最大数据帧)-14(以太网帧头)-4(以太网帧尾CRC校验)
MSS 1460字节
定义:TCP数据包每次能够传输的最大量
MSS=1500(MTU)-20(IP头)-20(TCP头)