HTTP的通讯流程

1、什么是HTTP

  1. http:是我们前/后台交互时的传输协议(即:超文本传输协议
  2. 解释
    • 是指:在进行传输时使用的协议
    • 协议中,规定了如何连接、如何发请求、如何携带数据、获取响应数据的格式、获取响应数据时,获取结束之后的链接/断开方式等

2、HTTP 的工作流程

  1. 服务器建立链接
  2. 建立链接后,发送一个请求服务器(请求)
  3. 服务器接受到请求以后进行相应的处理并给出一个回应(响应)
  4. 断开与服务器的链接
    • 注意:
      • 并不是前端发了请求这件事就结束了,而是发完请求获取响应之后这事才算结束
      • 所以HTTP的工作流程是针对一个"发",一个"收"这样整体来完成的
      • 在整体的传输过程中,为了传输数据的严谨性,会进行一些验证,验证通过后才会进行数据的传输

3、如何与服务器建立链接

  1. 需要保证客户端(浏览器)的接收和发送正常,服务器端的接收和发送正常
  2. 这里就涉及到一个东西叫做:TCP/IP 协议
    • http协议是基于TCP/IP协议的一个高级封装
    • http协议高级版的TCP协议,所以它的主要验证手段就是:三次握手 ,即:建立链接的主要步骤
  3. 三次握手
    • 客户端发送一个消息给到服务端
      • 此时:
        • 服务端知道了 客户端可以正常发送消息
        • 服务端知道了 服务端可以正常接受消息
    • 服务端回给客户端一个消息
      • 此时:
        • 服务端知道了 客户端可以正常发送消息
        • 服务端知道了 服务端可以正常接受消息
        • 客户端知道了 客户端可以正常发送消息
        • 客户端知道了 客户端可以正常接受消息
        • 客户端知道了 服务端可以正常接受消息
        • 客户端知道了 服务端可以正常发送消息
    • 客户端再回给服务端一个消息
      • 此时:
        • 服务端知道了 客户端可以正常发送消息
        • 服务端知道了 服务端可以正常接受消息
        • 客户端知道了 客户端可以正常发送消息
        • 客户端知道了 客户端可以正常接受消息
        • 客户端知道了 服务端可以正常接受消息
        • 客户端知道了 服务端可以正常发送消息
        • 服务端知道了 服务端可以正常发送消息
        • 服务端知道了 客户端可以正常接受消息
        • 简单来说:客户端自己收发共两次,在验证自己是否能收发共2次 + 服务端也是一样的 => 共8次
    • 至此,依照TCP/IP 协议建立链接就建立好了,双方都知道双方可以正常收发消息,确保可以正常的进行数据交互了,就可以进入到第二步:通讯

4、发送请求—前端的处理阶段

  1. 建立完链接以后就是发送请求的过程
  2. 每一个请求都要让所有信息包含请求
  3. 每一个请求都会有一个请求报文
  4. 请求报文中会包含:我们所有的请求信息(也就是:我们要和服务端说的"话"都在里面)
    • 注意 :
      • 浏览器发起请求是有固定格式的,虽然写的时候好像没有什么固定格式,但是浏览器发请求是需要按照协议的规范去发送,而ajax的使用工具里已经在内部封装好了按照协议规范去发送,而我们是应用层的使用者,也就是工具被封装好了,根据工具的使用条件去使用即可
      • 所有的请求发送,不管是xhr、fetch、axios这些ajax请求工具发起的请求格式都会被浏览器格式化成 请求报文这种类型
  5. 请求报文中会包含几个东西:
    • 请求行
    • 请求头(请求头都是键值对的形式出现的)
    • 请求空行(请求头和请求主体之间要留一个空白行)
    • 请求体(本次请求携带的数据)
  6. 完整的请求报文示例——post
POST /user HTTP/1.1      # 请求行
Host: www.user.com
Content-Type: application/x-www-form-urlencoded
accept: application/json
User-agent: Mozilla/5.0.     # 以上是首部
#(此处必须有一空行)  # 空行分割header和请求内容 
name=world   # 请求体
  1. 完整的请求报文示例——get
GET /user HTTP/1.1      # 请求行
Host: www.user.com
Content-Type: application/x-www-form-urlencoded
accept: application/json
User-agent: Mozilla/5.0.     # 以上是首部
#(此处必须有一空行)  # 空行分割header和请求内容

5、接受一个响应

  1. 客户端的请求发送到服务端以后,服务端进行对应的处理
  2. 会给我们返回一个响应,每一个响应都会有一个响应报文
  3. 响应报文中会包含我们所有的响应信息(也就是:服务端在接受到客户端请求以后,给我们的回信)
  4. 我们的响应报文中会包含几个信息:
    • 状态行
    • 响应头
    • 响应体

6、断开于服务端的链接

  1. 建立链接是基于TCP/IP协议三次握手
  2. 断开链接是基于TCP/IP协议四次挥手
    • 客户端发送一个"我要断开"的消息给服务端
    • 服务端接受到以后,发送消息告诉客户端:我已经进入关闭等待状态
    • 服务端再次发送一个消息告诉客户端:这是我的最后一次发消息给你,当我再接受到消息的时候就会关闭
    • 客户端接受到服务端的消息以后,告诉服务器:我已经关闭,这个是给你的最后一条消息

7、完成一个 HTTP请求具体流程

  1. 一个HTTP请求必须要包含的四个步骤
    • 建立链接
    • 发送请求
    • 接受响应
    • 断开链接
  2. 在一个HTTP请求中,请求的部分有请求报文,接受响应的部分有响应报文
    • 请求报文包含
      • 请求行
      • 请求头
      • 请求空行
      • 请求体
    • 响应报文包含
      • 状态行
      • 响应头
      • 响应体
  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值