当前位置: 首页 > news >正文

网络基础核心笔记(HTTP、TCP、前后端通信)

一、HTTP 请求/响应完整流程(登录案例)

假设用户在登录页面输入:

手机号:13800138000 密码:123456

点击登录按钮。

前端 JavaScript 代码:

fetch("/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({telephone:"13800138000",password:"123456"})})

浏览器会自动构造 HTTP 请求:

POST /login HTTP/1.1 Host: localhost:8000 Content-Type: application/json { "telephone":"13800138000", "password":"123456" }

后端 Gin 路由:

GE.POST("/login",Login)

收到请求后:

funcLogin(c*gin.Context){varreq LoginReq c.ShouldBindJSON(&req)}

Gin 内部流程:

读取 Body ↓ 解析 JSON ↓ 根据 json 标签匹配字段 ↓ 填充结构体 ↓ 执行参数校验

得到:

req.Telephone req.Password

随后:

查询数据库 ↓ 验证账号密码 ↓ 生成 JWT ↓ 返回结果

返回:

c.JSON(200,gin.H{"token":token,"msg":"登录成功",})

响应:

{"token":"xxxxx","msg":"登录成功"}

前端收到响应:

constres=awaitfetch(...)constdata=awaitres.json()localStorage.setItem("token",data.token)

至此登录完成。

完整链路:

用户点击登录 ↓ 前端 fetch ↓ HTTP 请求 ↓ Gin 路由 ↓ ShouldBindJSON ↓ 数据库查询 ↓ 生成 JWT ↓ c.JSON 返回 ↓ 前端接收 JSON ↓ 保存 Token ↓ 页面跳转

二、HTTP 请求由什么组成

一个完整请求:

POST /login HTTP/1.1 Host: localhost:8000 Content-Type: application/json { "telephone":"13800138000", "password":"123456" }

分为四部分。

1. 请求方法(Method)

GET POST PUT DELETE

表示客户端想干什么。

例如:

GET 查询 POST 新增 PUT 修改 DELETE 删除

2. 请求路径(Path)

/login /user/info /todo/list

决定执行哪个接口。

例如:

r.POST("/login",Login)

请求:

/login

执行:

Login()

3. 请求头(Header)

例如:

Content-Type: application/json Authorization: Bearer xxxxx

作用:

说明数据格式 携带 Token 携带 Cookie 携带浏览器信息

4. 请求体(Body)

真正的数据。

{"telephone":"13800138000","password":"123456"}

Gin:

c.ShouldBindJSON(&req)

就是读取这里的数据。


三、HTTP 响应由什么组成

后端返回:

HTTP/1.1 200 OK Content-Type: application/json { "msg":"success" }

包含三部分。

1. 状态码

200 成功 400 参数错误 401 未登录 403 无权限 404 找不到资源 500 服务器异常

2. 响应头

Content-Type: application/json

告诉浏览器:

返回的是 JSON 数据

3. 响应体

{"msg":"success"}

真正返回的数据。


四、TCP 三次握手

HTTP 请求发送之前。

必须先建立 TCP 连接。

第一次握手

客户端发送:

SYN

意思:

我要建立连接

第二次握手

服务器回复:

SYN + ACK

意思:

我收到了 我也准备好了

第三次握手

客户端回复:

ACK

意思:

收到 开始通信

过程:

客户端 服务器 SYN ------------------> <-------------- SYN + ACK ACK ------------------>

连接建立成功。


为什么必须三次?

目的:

客户端确认: 服务器能收 服务器能发 服务器确认: 客户端能收 客户端能发

三次刚好。

两次不够。

四次浪费。


五、TCP 四次挥手

关闭连接时:

第一次挥手

客户端:

FIN

意思:

我没数据发了

第二次挥手

服务器:

ACK

意思:

收到 但我还有数据没发完

第三次挥手

服务器:

FIN

意思:

我也发完了

第四次挥手

客户端:

ACK

意思:

收到 连接关闭

过程:

客户端 服务器 FIN ------------------> <-------------- ACK <-------------- FIN ACK ------------------>

六、TCP 和 UDP 的区别

TCP

特点:

面向连接 可靠传输 保证顺序 保证不丢包

应用:

HTTP HTTPS MySQL Redis WebSocket

UDP

特点:

无连接 不保证到达 不保证顺序 速度快

应用:

视频直播 语音通话 在线游戏 实时音视频

对比:

特性TCPUDP
是否连接需要不需要
是否可靠
是否有序
速度较慢较快
应用HTTP、数据库直播、游戏

七、HTTP、TCP、IP 三者关系

很多人学到这里容易混。

实际上:

HTTP ↓ TCP ↓ IP

HTTP

负责:

规定数据格式

例如:

POST /login HTTP/1.1

属于 HTTP 协议。


TCP

负责:

可靠传输数据

保证:

不丢包 不重复 不乱序

IP

负责:

找到目标机器

例如:

192.168.1.100 8.8.8.8

这些都是 IP 地址。


快递类比

HTTP = 信件内容格式 TCP = 快递运输规则 IP = 收件地址

八、真实项目中的完整链路

以 Gin 项目为例:

用户 ↓ Vue 页面 ↓ Axios / Fetch ↓ HTTP 请求 ↓ TCP 三次握手 ↓ Gin 路由 ↓ ShouldBindJSON ↓ Service 业务层 ↓ GORM ↓ MySQL ↓ 返回 JSON ↓ 前端渲染页面

九、一句话总结

前端负责页面,后端负责数据。

用户点击按钮后,前端通过 HTTP 发送 JSON 数据,HTTP 底层通过 TCP 三次握手建立连接,再通过 IP 找到服务器。Gin 接收请求后解析 JSON、处理业务并返回响应,前端收到 JSON 后更新页面,这样就完成了一次完整的前后端通信。

前端 ↓ HTTP ↓ TCP ↓ Gin ↓ MySQL ↓ Gin ↓ HTTP ↓ 前端
http://www.jsqmd.com/news/947448/

相关文章:

  • 如何在10分钟内掌握哔哩下载姬downkyi:从新手到高手的完整指南
  • 当AI学会“操纵“训练过程:KAIST与MIT揭示大模型对齐的深层漏洞
  • DPDK硬件兼容性清单:从Intel网卡到NVIDIA BlueField,你的设备在支持列表里吗?
  • PHP配置中心与动态配置管理
  • 25个Adobe Illustrator脚本:终极设计自动化解决方案
  • Spring Boot 3.3启动加速与配置简化实战解析
  • 新手福音:用快马平台生成mcjscc网页版学习工具,零基础轻松入门前端开发
  • MIG25飞机ISAR成像MATLAB代码包:基于OMP算法的欠采样稀疏重建实现
  • 戴尔G15散热控制神器:TCC-G15开源替代方案完全指南
  • NVIDIA Profile Inspector终极指南:三步解决游戏卡顿和画质问题
  • 2026 盐城全域工装优选榜单|商铺门面 / 写字楼 / 商场改造 3 家正规装修企业实测对比 + 本地专属工装避坑全攻略 - 本地便民网
  • 从UE4到Unity:技术美术面试官最爱问的Shader与渲染管线10大高频题(附避坑指南)
  • 3种高性能架构方案对比:Poppler-Windows的云原生部署终极指南
  • 从排队到金融风控:用Python实战模拟泊松过程,理解事件流的合成与分解
  • 终极指南:BetterJoy 完整解决方案,让Switch控制器在PC上完美工作
  • geo优化系统源码搭建保姆式搭建教程
  • STM32 Bootloader跳转App总进HardFault?一个PSP和MSP的堆栈陷阱
  • 基于YOLOv9与ConSinGAN的金属板材缺陷检测系统
  • ROS开发专栏---基于图像视觉的目标追踪实验--适配Ubuntu 22.04
  • Cursor与Grok 4真实能力边界:AST驱动开发提效与本地化推理实践
  • 【2024音频AI整合生死线】:为什么你的ASR准确率骤降37%?——基于17个真实产线故障的日志溯源报告
  • 猫抓插件终极指南:如何高效捕获浏览器中的媒体资源
  • 智能资源嗅探革命:5步实现浏览器媒体资源自动化管理
  • 【AI历史学家养成指南】:20年档案专家亲授5大智能工具链,3天构建可验证的时空知识图谱
  • 为什么大厂都在做服务降级?看完你就明白Dubbo的价值了
  • 2026 大厂红队社招面经|从简历初筛到终面全流程,考点 + 答题思路整理
  • 从原理到代码:手把手带你玩转STM32F103的LL库看门狗,附超时时间计算器
  • 2026年想选专业靠谱的赣州家具?这份实用挑选攻略帮你少走弯路
  • 实战演练,基于快马AI生成游戏背包系统,掌握ccswitch在复杂UI中的核心应用
  • 计算机毕业设计之基于python的抖音舆情可视化系统