HTTP请求过程

http请求过程

从源端到终端,请求报文和响应报文要经过四层关口,才可以传输,分为:

  • 应用层 (如http)
  • 传输层 (如TCP)
  • 网络层 (如IP)
  • 链接层 (设备驱动程序以及网卡)

协议

经过约定,使通信两端以相同规则存储,接收,发送数据

分层初探

应用层

应用程序将数据以相应规则进行包装,发给传输层【HTTP,FTP,SMTP,SNMP】

传输层

将应用层传来的数据进行分组,标记,交给网络层【TCP,UDP】

分组和标记是为了保证顺序及完整性

网络层

以最快的方式将数据发送到目标终端【IP,ICMP,IGMP】

链路层

为网络层发送和接收数据单元【ARP,RARP】

[!IMPORTANT]

在这整个过程中,数据在发送及接收时,需要进行封装和分用的操作

  • 封装:报文==>向下层,添加协议标识【此后递归操作到最底层】
  • 分用:去掉报文首部(协议标识)==>向上层【递归到最上层直至接收】

HTTP应用层

报文分类

  • 用户触发交互的行为数据
  • 服务端对此做出的响应

报文作为了客户端和服务端沟通的载体

起始行

  • 请求:方法+请求URL+协议版本
  • 响应:协议版本+状态码+描述文本
方法的分类
方法含义有无主体
GET从服务端获取资源
HEAD只获取资源头部
POST向服务端发送数据

…还有其他的没有列出来

状态码的分类
范围已定义范围含义
100~199100~101信息提示
200~299200~206成功
300~399300~305重定向
400~499400~415客户端错误
500~599500~505服务端错误

首部

形式为键值对==>为了协商具体行为

首部可分类为

请求响应通用实体扩展
  • 请求为告诉服务端的信息
  • 响应为告诉客户端的信息
  • 通用为大家都可用到的,如时间相关的信息
  • 实体可有在报文实体中数据的类型,长度等等 【可有可无】
  • 扩展为了在一些对应传输中进行一些个性化的操作

实体

实体分为实体首部和实体主体,实体首部是用来描述主体的

实体部分是可选的,它被用来运送请求或者响应的数据

传输层-TCP

HTTP连接是建立在TCP连接的基础上

形式通过一条已经打开的TCP连接,按顺序进行传输

需要判断完整性,顺序,是否损坏,重复,通过检验和,序列号,确认应答,重发控制,连接管理和窗口机制

传输控制依赖首部包含的6个标志【0/1】

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • URG:紧急指针
  • ACK:确认序号是否有效
  • PSH:接收方应尽快将这个报文段交给应用层
  • RST:重建连接
  • SYN:同步序号用来发起一个连接
  • FIN:发送端完成发送任务

一个TCP通过4个值确认:源IP,源端口,目的IP,目的端口

[!IMPORTANT]

TCP还有一些超时重传,拥塞避免,慢启动的机制,都可以保证分组数据按照顺序完整的传到目标端

网络层-IP

提过了两个节点之间的连接 【保证快但不保证稳定】–IP就像是装着货物的卡车

选路,分片,重组

若两端IP协议版本不同,IP数据会丢失

[!IMPORTANT]

  • 服务类型TOS:4bit为最小时延,最大吞吐量,最高可靠性,最小费用,1bit为未用位
  • 生存时间TTL:表示可经过的路由个数,每过一个路由,值-1,解决了数据报在一个路由环路一直转发的问题
  • 上层协议:决定接收端上层为TCP还是UDP
  • 分组标识:这个标识相当于ID,每成功发送一个分片,+1
  • 片偏移:标识了当前分片距离原始数据报开始处的位置

路由选择

IP层可配置成主机,也可配置成路由器

  • 主机:若IP地址不为本机IP,数据报会丢失
  • 路由器:根据路由表进行路由选择,将数据包传到下一跳
路由器

–用来连接两个或多个网络的硬件设备–

做什么

通过查询路由表,查看是否有对应的IP地址,将数据报传到下一个路由或目标IP

有什么用

  • 实现网络互联互通 – 不同接口和协议,实现局域网和广域网的互联
  • 实现数据高性能转发
  • 实现网络管理(配置,性能,容错,流量)
路由表

存储在路由器中的数据表 – 一个条目为一个路由

若在路由表中找不到对应的IP地址,会向发送数据报的设备发送ICMP报错信息

路由条目

以来源分类

  • 直连路由:本地接口所在的网段,路由器自行写入
  • 静态路由:(网络管理员手动配置)
  • 动态路由:由动态路由协议发现并写入路由表中

以目的地分类

  • 主机路由:唯一目的地主机
  • 网段路由:一个网络段中的所有主机
  • Mask:网络掩码
  • Proto:路由协议名
  • Pre:本条目加入该路由器的优先级
  • Cost:路由开销
  • Flag:路由标记
  • Interface:输出接口,说明IP包将从该路由器哪个接口转发
路由协议

路由设备之间维护路由表的规则,用于发现路由,生成路由表,并指导报文转发

  • IGP
  • EGP
路由器分类

以使用场景分类

  • 企业路由器
  • 运营商路由器
  • 家用路由器

以实际作用分类

  • 骨干路由器
  • 城域路由器
  • 接入路由器

数据分片

根据目的端IP层的MTU来决定最大数据量(MSS)

MTU:Max Transform Unit

传输时,数据报是无序的

链路层

地址解析协议ARP

前言:

​ 光有IP地址无法直接发送数据报,需找到对应的MAC地址(结合链路层的ARP协议)

MAC地址:用于网络中唯一标识一个网卡

过程

[!IMPORTANT]

若ARP缓存表中有IP与MAC的映射,直接封装并发送到链路层传输

若无,则发送请求广播,若为目标IP地址,且请求内有源IP和源MAC地址,回应一个ARP应答

封装发送的是以太网数据帧

传输和接收

  1. 接收到,根据MTU及数据报大小对IP数据报分片
  2. 封装成一帧,传给底层组件,转为比特流,发送出去,以太网设备接收到帧,检查目标地址,若与本机地址匹配,处理,向上传递(分用过程)
HTTP请求的完整过程可以分为以下几个步骤: 1. 建立连接:客户端使用TCP协议与服务器建立连接。首先需要解析URL,获取服务器的主机地址和端口号。然后客户端会发送一个SYN包给服务器,服务器收到后返回一个SYN-ACK包给客户端,最后客户端发送一个ACK包确认连接建立。 2. 发送请求头:连接建立后,客户端会发送一个HTTP请求给服务器。请求包含请求行、请求头和请求体。请求行包括请求方法(GET、POST等)、请求的URI(Uniform Resource Identifier)和HTTP协议版本。请求头包含一些附加的信息,如用户代理、Accept-Language、Cookie等。 3. 服务器响应:服务器接收到请求后,会进行处理并生成相应的HTTP响应。响应包括响应行、响应头和响应体。响应行包括HTTP协议版本、状态码和状态消息。响应头包含服务器信息、内容类型、内容长度等相关信息。响应体包含实际的响应数据。 4. 接收响应:客户端接收到服务器的响应后,会进行解析和处理。根据状态码判断请求是否成功,并根据响应头中的信息进行相应的处理,如获取内容长度、内容类型等。 5. 处理响应:根据响应头中的内容类型,客户端可以选择不同的方式来处理响应数据。常见的内容类型包括HTML、JSON、XML等。客户端可以将响应数据展示给用户,或者进行进一步的处理,如解析JSON数据、解析XML数据等。 6. 关闭连接:处理完响应后,客户端和服务器会关闭连接。客户端发送一个FIN包给服务器,服务器收到后返回一个ACK包给客户端,最后服务器发送一个FIN包给客户端,客户端收到后返回一个ACK包给服务器,双方完成连接的关闭。 以上就是HTTP请求的全过程。其中,客户端和服务器之间的通信是通过TCP协议进行的。PHP是一种服务器端脚本语言,可以用来处理HTTP请求和生成HTTP响应。在PHP中,可以使用内置的函数和扩展来处理HTTP请求和响应,如$_GET、$_POST、header()函数等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值