前后端开发必备的计算机网络知识
做 Web 前后端,不必把《计算机网络》整本啃完,但要把「浏览器 / App 如何把请求送到服务、服务如何回响应」这条链路吃透。本文按日常开发会踩到的问题组织,偏实用。
一、先建立一张总图
一次典型的前端调后端:
浏览器 / App
↓ DNS 解析域名 → IP
↓ TCP 三次握手(HTTPS 还有 TLS 握手)
↓ 发送 HTTP 请求(方法、路径、头、Body)
网关 / Nginx / 反向代理(可选)
↓
后端服务(Spring / Node / …)
↓
数据库 / Redis / MQ(内网再连一次)
↓
HTTP 响应(状态码、头、Body)
↓
前端渲染 / 处理错误
前后端天天打交道的,主要是:DNS、TCP/TLS、HTTP、端口、代理、CORS、Cookie、缓存、超时与重试。
二、IP、端口、域名
1. IP 与端口
| IP | 主机在网络中的地址 | 127.0.0.1 本机,10.0.2.2 虚拟机看宿主机 |
| 端口 | 同一台机器上区分进程 | 前端 5173,后端 8081,MySQL 3306,Redis 6379 |
| localhost | 本机回环 | 只表示「自己」,容器里的 localhost ≠ 宿主机 |
URL 形态:
https://api.example.com:443/api/books?page=1
└协议┘ └────主机名────┘ └端口┘└路径┘ └查询┘
省略端口时:HTTP 默认 80,HTTPS 默认 443。
2. DNS
浏览器输入域名后,先查 DNS 得到 IP,再连 IP。
开发相关点:
- 改了 DNS / hosts,要清浏览器或系统 DNS 缓存才生效
- localhost 一般不走公网 DNS,直接解析到 127.0.0.1 / ::1
- 前后端分离时,前端域名与 API 域名不同,会引出 CORS(见后文)
3. 公网、内网、端口转发
| 本机前后端 | 前端 localhost:5173 调 localhost:8081 |
| Docker / 虚拟机 | 容器端口要映射到宿主机;VirtualBox 常用 NAT 端口转发 |
| 局域网联调 | 用电脑局域网 IP(如 192.168.x.x),注意防火墙 |
三、TCP 与连接(够用即可)
HTTP(1.x)通常跑在 TCP 之上。
开发需要记住的
前后端排查口诀:
能 ping / 端口通不通? → 网络与进程
TLS 报错? → 证书 / HTTPS 配置
HTTP 4xx/5xx? → 应用与权限逻辑
四、HTTP:前后端的共同语言
1. 请求方法
| GET | 查询 | 参数多在 Query;不应有副作用 |
| POST | 创建 / 提交 | Body 常见 JSON |
| PUT / PATCH | 全量 / 部分更新 | 约定要前后端一致 |
| DELETE | 删除 |
REST 是约定,不是协议强制;重要的是 团队对方法与路径的约定一致。
2. 状态码(必须熟)
| 2xx | 成功 | 200 OK,201 Created,204 No Content |
| 3xx | 重定向 | 301/302,前端要理解是否跟随 |
| 4xx | 客户端问题 | 400 参数错,401 未登录,403 无权限,404 不存在,409 冲突 |
| 5xx | 服务端问题 | 500 异常,502/504 网关/上游超时 |
联调时先看状态码,再看 Body 里的业务 code。
3. Header(头)里常见字段
请求侧
| Content-Type | Body 格式,如 application/json |
| Authorization | 常放 Bearer <JWT> |
| Cookie | 浏览器自动带上的会话信息 |
| Accept | 客户端期望的响应类型 |
| Origin | 浏览器跨域时自动带,后端 CORS 会用到 |
响应侧
| Content-Type | 响应体类型 |
| Set-Cookie | 让浏览器存 Cookie |
| Cache-Control / ETag | 缓存 |
| Access-Control-* | CORS 相关 |
| Location | 重定向目标 |
4. Body 与编码
- JSON:Content-Type: application/json; charset=utf-8
- 表单:application/x-www-form-urlencoded 或 multipart/form-data(上传文件)
- 中文乱码:多半是编码未统一成 UTF-8
5. 幂等与安全(后端必懂,前端要配合)
| 幂等 | 同一请求执行多次,效果一样 | 支付、下单用 idempotencyKey |
| 安全方法 | GET 不应改数据 | 不要用 GET 做删除 |
| 重试 | 网络抖动可能重发 | 写操作要防重复 |
五、HTTPS 与 TLS(够排查即可)
HTTPS = HTTP + TLS。
开发相关:
生产 API 应走 HTTPS;本地前后端可用 HTTP,但不要把「生产关 HTTPS」当常态。
六、跨域 CORS(前端高频、后端要配)
浏览器的同源策略:协议 + 域名 + 端口 都相同才算同源。
前端 https://www.example.com
API https://api.example.com
→ 不同源 → 跨域
简单理解
开发常见解法
| 前端代理 | Vite/Webpack proxy 把 /api 转到后端,浏览器只访问同源 |
| 后端 CORS | Spring CorsConfiguration 放行前端 Origin |
| 网关统一 | Nginx 统一加 CORS 头 |
注意:CORS 是 浏览器 限制;Postman / 服务端调服务端没有 CORS 问题。
七、Cookie、Session、Token
对比
| Cookie + Session | 服务端存会话,浏览器存 SessionId | 注意域名、Path、HttpOnly、SameSite |
| JWT / Token | 客户端存 Token,请求头携带 | XSS 风险;过期与刷新策略 |
| LocalStorage 存 Token | 方便但易被 XSS 读 | 敏感场景更倾向 HttpOnly Cookie |
SameSite(跨站 Cookie)
| Strict | 跨站几乎不带 Cookie |
| Lax | 常见默认,部分跨站导航会带 |
| None | 跨站可带,必须配 Secure |
前后端分离 + 不同域名时,登录态问题多半出在 Cookie 域与 SameSite,而不是「后端没写 Session」。
八、缓存:浏览器与 HTTP 缓存
| 强缓存 | Cache-Control: max-age=…,未过期直接用本地 |
| 协商缓存 | ETag / Last-Modified,问服务器变了没 |
| 前端内存 / 状态缓存 | Vue/React 里缓存接口结果,与 HTTP 缓存不同层 |
接口「改了数据页面还是旧的」:先看是不是被浏览器或 CDN 缓存了 GET。
九、反向代理、网关、负载均衡
生产常见:
用户 → Nginx / API Gateway → 多台后端实例
| 反向代理 | 隐藏后端、TLS 终结、静态资源、路径转发 |
| 负载均衡 | 把请求分到多实例 |
| 网关 | 鉴权、限流、路由、协议转换 |
开发相关配置例子:
location /api/ {
proxy_pass http://127.0.0.1:8081/api/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
后端若要根据「真实客户端 IP」或「是否 HTTPS」做逻辑,要读 X-Forwarded-*(并只信任自己的代理)。
十、WebSocket 与长连接(了解)
| 普通 CRUD | HTTP 请求响应 |
| 聊天、推送、实时看板 | WebSocket / SSE |
WebSocket 也是先 HTTP 握手再升级;同样有跨域、鉴权、代理超时(Nginx 要调 proxy_read_timeout)问题。
十一、超时、重试、幂等(前后端都要约定)
超时分层
浏览器 / axios timeout
→ Nginx proxy_read_timeout
→ 后端 MVC 超时
→ 调用 DB / Redis / 第三方的超时
任一层过短,都会表现为前端「请求失败」,但根因可能在更里层。
重试原则
- GET / 查询:可谨慎重试
- POST 支付、下单、抢券:必须幂等键或服务端去重,不能盲目重试
十二、前后端联调排查清单
按顺序查,少走弯路:
前端 Network 面板必看四列:Status、Headers、Payload、Response。
十三、后端还要多懂一点「内网」
浏览器到 API 是公网/办公网;服务内部还有:
| MySQL | 3306 | TCP |
| Redis | 6379 | TCP |
| RabbitMQ | 5672 / 管理台 15672 | AMQP / HTTP |
| Milvus | 19530 | gRPC |
内网也要关心:超时、连接池、服务发现、防火墙、容器网络(host.docker.internal、Docker Compose 服务名)。
gRPC 与 HTTP 不同,但同样跑在 TCP 上;调不通时先确认端口映射与进程健康,再查应用层。
十四、学习优先级建议
前端优先
后端优先
双方共同
- 接口契约(路径、方法、状态码、错误体)
- 环境与配置(dev / test / prod 基地址)
- 超时与重试策略写进文档
十五、一句话对照表
| ERR_CONNECTION_REFUSED | 端口错 / 服务未启动 |
| CORS 报错 | 跨域未配 / 预检失败 |
| 401 | Token / Cookie / 登录态 |
| 403 | 权限角色 |
| 404 | 路径或网关转发 |
| 502/504 | 网关后上游挂了或超时 |
| 本地 Postman 通、浏览器不通 | 多半 CORS 或 Cookie |
| 有时成功有时失败 | 超时、负载、重试无幂等 |
小结
前后端需要的网络知识,核心不是背协议字段,而是能回答:
把 HTTP + 跨域 + 认证携带方式 + 代理与超时 吃透,日常联调与排障就够用了;其余(拥塞控制、详细路由算法等)等做基础设施时再加深。






