前后端分离与HTTP请求 笔记梳理
程序前后端分离:
- 客户端与业务端的联系流程:
graph TD
终端/我的设备 <--> 前端路由 <--> 页面 <--> 状态管理 <--> API接口层 <--> HTTP请求
数据库 <--> 业务逻辑 <--> 后端路由 <--> 请求解析 <--> HTTP请求
左侧为前端,右侧为后端。
-
HTTP协议 (类似编码规则) :
全称"Hypertext Transfer Protocal"超文本传输协议。
超文本:相当于广义上的文本或者页面资源。包括图片、视频、跳转链接等。
协议存在目的 做所有网络链接方式最外层的封装,形成一个统一普适的规定格式。 -
协议内容:
-
明确的边界:链接的开始和结束。 -
能携带消息: 具体的信息和消息类型。 -
具体结构: 请求行/请求头/请求体
请求行包括了使用的协议类型、访问的地址和请求的方法。请求头:请求的元数据(键值对) ,比如 {Who: Host, Content-Type: text/plain, Content-length: 28}。 请求体中才是真正需要执行的操作,比如调用后端的某个函数。
- TCP与UDP 协议的区别:
TCP协议是基于连接的,需要客户端和服务端进行多次握手,进行数据包的传递。它的特点是客户端和服务端可以互相沟通状态,确保数据包成功发送或返回发送失败的信息。问题是这样效率相对较低。
UDP协议不是基于连接,无需多次握手,相当于直接从用户端将一个一个数据包直接送到服务端。用户端并不知道自己的数据包是否到达。受到网络波动时,有的包就会丢失,用户端就会出现体验下降。(例:上网课时,网络卡顿,漏掉视频的一部分。)但是UDP的好处是效率很高。
因此TCP协议适合对速度要求不高但是对丢包率容忍度低的请求:比如文档上传、用户登陆等。
UDP协议适合对于速度/流畅度要求高但是允许一定丢包的请求:比如音视频通话。[1] - 不同版本的HTTP协议的问题/特点:
HTTP1: 问题是队头阻塞(所需信息不来会一直等待)、传输效率低--不支持多路复用(当前请求未处理完,本连接上无法发送其他请求)、明文传输不安全(请求数据未被加密)。
HTTP2: 支持多路复用、头部压缩提高效率、二进制协议(HTTP请求需要被代码化才能进行使用,如果是文字协议就可能是将输入的结构体转化为unicode,这样做方便开发人员进行阅读调试。二进制协议则是将请求数据转化为二进制,以字节为单位传输,虽然丧失了可读性,但是效率更高。)提高效率、但由于仍然基于TCP协议,无法解决队头阻塞问题。
QUIC: 基于UDP协议,解决队头阻塞、加密、减少握手次数、支持快速启动。
[1] CSDN 图解TCP与UDP协议blog.csdn.net/m0_71777195…