HTTP的通讯流程

2024-08-28 12:04
文章标签 流程 http 通讯

本文主要是介绍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请求中,请求的部分有请求报文,接受响应的部分有响应报文
    • 请求报文包含
      • 请求行
      • 请求头
      • 请求空行
      • 请求体
    • 响应报文包含
      • 状态行
      • 响应头
      • 响应体

这篇关于HTTP的通讯流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1114711

相关文章

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

Linux中修改Apache HTTP Server(httpd)默认端口的完整指南

《Linux中修改ApacheHTTPServer(httpd)默认端口的完整指南》ApacheHTTPServer(简称httpd)是Linux系统中最常用的Web服务器之一,本文将详细介绍如何... 目录一、修改 httpd 默认端口的步骤1. 查找 httpd 配置文件路径2. 编辑配置文件3. 保存

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

使用JavaConfig配置Spring的流程步骤

《使用JavaConfig配置Spring的流程步骤》JavaConfig是Spring框架提供的一种基于Java的配置方式,它通过使用@Configuration注解标记的类来替代传统的XML配置文... 目录一、什么是 JavaConfig?1. 核心注解2. 与 XML 配置的对比二、JavaConf

C++ HTTP框架推荐(特点及优势)

《C++HTTP框架推荐(特点及优势)》:本文主要介绍C++HTTP框架推荐的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Crow2. Drogon3. Pistache4. cpp-httplib5. Beast (Boos