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

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

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

txt 复制代码
手机号:13800138000
密码:123456

点击登录按钮。

前端 JavaScript 代码:

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

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

http 复制代码
POST /login HTTP/1.1
Host: localhost:8000
Content-Type: application/json

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

后端 Gin 路由:

go 复制代码
GE.POST("/login", Login)

收到请求后:

go 复制代码
func Login(c *gin.Context) {

    var req LoginReq

    c.ShouldBindJSON(&req)

}

Gin 内部流程:

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

得到:

go 复制代码
req.Telephone
req.Password

随后:

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

返回:

go 复制代码
c.JSON(200, gin.H{
    "token": token,
    "msg": "登录成功",
})

响应:

json 复制代码
{
    "token":"xxxxx",
    "msg":"登录成功"
}

前端收到响应:

js 复制代码
const res = await fetch(...)

const data = await res.json()

localStorage.setItem("token", data.token)

至此登录完成。

完整链路:

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

二、HTTP 请求由什么组成

一个完整请求:

http 复制代码
POST /login HTTP/1.1
Host: localhost:8000
Content-Type: application/json

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

分为四部分。

1. 请求方法(Method)

txt 复制代码
GET
POST
PUT
DELETE

表示客户端想干什么。

例如:

txt 复制代码
GET     查询
POST    新增
PUT     修改
DELETE  删除

2. 请求路径(Path)

txt 复制代码
/login
/user/info
/todo/list

决定执行哪个接口。

例如:

go 复制代码
r.POST("/login", Login)

请求:

txt 复制代码
/login

执行:

go 复制代码
Login()

3. 请求头(Header)

例如:

http 复制代码
Content-Type: application/json

Authorization: Bearer xxxxx

作用:

txt 复制代码
说明数据格式

携带 Token

携带 Cookie

携带浏览器信息

4. 请求体(Body)

真正的数据。

json 复制代码
{
    "telephone":"13800138000",
    "password":"123456"
}

Gin:

go 复制代码
c.ShouldBindJSON(&req)

就是读取这里的数据。


三、HTTP 响应由什么组成

后端返回:

http 复制代码
HTTP/1.1 200 OK
Content-Type: application/json

{
    "msg":"success"
}

包含三部分。

1. 状态码

txt 复制代码
200 成功

400 参数错误

401 未登录

403 无权限

404 找不到资源

500 服务器异常

2. 响应头

http 复制代码
Content-Type: application/json

告诉浏览器:

txt 复制代码
返回的是 JSON 数据

3. 响应体

json 复制代码
{
    "msg":"success"
}

真正返回的数据。


四、TCP 三次握手

HTTP 请求发送之前。

必须先建立 TCP 连接。

第一次握手

客户端发送:

txt 复制代码
SYN

意思:

txt 复制代码
我要建立连接

第二次握手

服务器回复:

txt 复制代码
SYN + ACK

意思:

txt 复制代码
我收到了
我也准备好了

第三次握手

客户端回复:

txt 复制代码
ACK

意思:

txt 复制代码
收到
开始通信

过程:

txt 复制代码
客户端                  服务器

SYN ------------------>

      <-------------- SYN + ACK

ACK ------------------>

连接建立成功。


为什么必须三次?

目的:

txt 复制代码
客户端确认:

服务器能收
服务器能发

服务器确认:

客户端能收
客户端能发

三次刚好。

两次不够。

四次浪费。


五、TCP 四次挥手

关闭连接时:

第一次挥手

客户端:

txt 复制代码
FIN

意思:

txt 复制代码
我没数据发了

第二次挥手

服务器:

txt 复制代码
ACK

意思:

txt 复制代码
收到
但我还有数据没发完

第三次挥手

服务器:

txt 复制代码
FIN

意思:

txt 复制代码
我也发完了

第四次挥手

客户端:

txt 复制代码
ACK

意思:

txt 复制代码
收到
连接关闭

过程:

txt 复制代码
客户端                  服务器

FIN ------------------>

      <-------------- ACK

      <-------------- FIN

ACK ------------------>

六、TCP 和 UDP 的区别

TCP

特点:

txt 复制代码
面向连接

可靠传输

保证顺序

保证不丢包

应用:

txt 复制代码
HTTP

HTTPS

MySQL

Redis

WebSocket

UDP

特点:

txt 复制代码
无连接

不保证到达

不保证顺序

速度快

应用:

txt 复制代码
视频直播

语音通话

在线游戏

实时音视频

对比:

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

七、HTTP、TCP、IP 三者关系

很多人学到这里容易混。

实际上:

txt 复制代码
HTTP
 ↓
TCP
 ↓
IP

HTTP

负责:

txt 复制代码
规定数据格式

例如:

http 复制代码
POST /login HTTP/1.1

属于 HTTP 协议。


TCP

负责:

txt 复制代码
可靠传输数据

保证:

txt 复制代码
不丢包

不重复

不乱序

IP

负责:

txt 复制代码
找到目标机器

例如:

txt 复制代码
192.168.1.100

8.8.8.8

这些都是 IP 地址。


快递类比

txt 复制代码
HTTP = 信件内容格式

TCP = 快递运输规则

IP = 收件地址

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

以 Gin 项目为例:

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

九、一句话总结

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

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

txt 复制代码
前端
 ↓
HTTP
 ↓
TCP
 ↓
Gin
 ↓
MySQL
 ↓
Gin
 ↓
HTTP
 ↓
前端
相关推荐
LinXunFeng3 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
霜落长河6 天前
抛弃TCP改用UDP,HTTP3怎么了?
http
网络研究院7 天前
2026年网络安全
网络·安全·法律·法规·趋势·发展
酣大智7 天前
ARP代理--工作原理
运维·网络·arp·arp代理
treesforest7 天前
AI安全系统如何识别异常访问?IP风险识别正在成为关键能力
网络·人工智能·tcp/ip·安全·web安全
shushangyun_7 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
闪闪发亮的小星星7 天前
高斯光以及高斯光公式解释
笔记
2601_961845157 天前
粉笔行测题库|系统班|刷题
网络·百度·微信·微信公众平台·facebook·新浪微博
程序猿阿伟7 天前
《Chrome离线扩展安装的底层逻辑与场景落地指南》
服务器·网络·chrome
cqbzcsq7 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息