系列:后端路线 · Part 3
框架(Part 2)让你能写接口,但接口”长什么样、前后端怎么对话”由协议决定。本篇讲清 HTTP 与 RESTful API——这是前后端协作的”普通话”。
1. HTTP 是什么?
HTTP(超文本传输协议)是客户端与服务器之间请求/响应的文本协议,无状态(每次请求独立,服务器不记得你上一次是谁——需靠 Cookie/Token 弥补)。默认端口 80,HTTPS = HTTP + TLS 加密,端口 443。
2. 一个请求长什么样
1 | POST /api/user/login HTTP/1.1 |
- 请求行:方法 + 路径 + 协议版本
- 请求头(Header):元信息(Content-Type、Authorization…)
- 请求体(Body):数据(POST/PUT 才有,通常是 JSON)
响应:
1 | HTTP/1.1 200 OK |
3. 请求方法(Method)
| 方法 | 语义 | 幂等 | 例子 |
|---|---|---|---|
| GET | 查询资源 | ✅ | 获取用户列表 |
| POST | 新建资源 | ❌ | 注册/登录 |
| PUT | 整体更新 | ✅ | 改用户全部资料 |
| PATCH | 部分更新 | ❌ | 改用户昵称 |
| DELETE | 删除资源 | ✅ | 注销用户 |
幂等:多次执行效果相同(GET/PUT/DELETE),重试安全;POST 重复提交可能创建多条——这也是为什么”下单”要防重。
4. 状态码(必背)
| 段 | 含义 | 常见 |
|---|---|---|
| 2xx | 成功 | 200 OK、201 Created |
| 3xx | 重定向 | 301 永久、302 临时、304 缓存 |
| 4xx | 客户端错误 | 400 参数错、401 未认证、403 无权限、404 资源不存在、429 限流 |
| 5xx | 服务端错误 | 500 内部异常、502 网关错、503 服务不可用 |
调试口诀:4xx 是你(前端/调用方)的锅,5xx 是服务器(后端)的锅。
5. RESTful API 设计风格
REST 是一种用 URL 定位资源、用 HTTP 方法表示操作的约定:
1 | GET /api/users 查列表 |
规范要点:
- 资源用名词复数(
/users而非/getUser)。 - 层级用
/(/users/1/orders表示某用户的订单)。 - 过滤/分页用查询参数(
/users?age=18&page=1)。 - 版本可放路径(
/api/v1/users)。 - 统一响应体:
{"code":0,"msg":"ok","data":{...}},前端按code判断成功失败。
面试点:”RESTful 是什么?” 答:一种架构风格,核心是资源导向、无状态、统一接口(用 HTTP 动词操作 URI 资源)。
6. Content-Type(前后端约定的”语言”)
| 类型 | 用途 |
|---|---|
application/json |
主流,请求/响应都是 JSON |
application/x-www-form-urlencoded |
表单提交(key=value&…) |
multipart/form-data |
文件上传 |
text/plain |
纯文本 |
常见坑:前端发 JSON,后端却用
@RequestParam接 → 取不到(要用@RequestBody)。反之亦然。前后端Content-Type 与接收方式必须配套。
7. 认证:Cookie / Session / Token(JWT)
HTTP 无状态,如何识别”这是登录后的张三”?
- Cookie + Session:登录后服务器存 Session(内存/Redis),把 sessionId 写进 Cookie,后续请求自动带。缺点:服务器要存状态,分布式需共享 Session。
- Token(JWT):登录后服务器签发一个带签名、含用户信息的 Token(如 JWT),客户端存 localStorage,每次请求在 Header
Authorization: Bearer <token>带上。服务器不存状态,靠签名验真。适合前后端分离 / 微服务。 - OAuth2:第三方登录(微信/QQ 登录)用,授权第三方有限访问。
速记:Session 是”服务器记你”,Token 是”你带着身份证自己证明自己”。
8. 面试速通题
Q1:GET 和 POST 区别?
GET 参数在 URL(明文、长度受限、可缓存、幂等),用于查询;POST 参数在 Body(更安全、体积大),用于提交/新建。本质是语义区别,技术上都可带 Body。
Q2:301 和 302 区别?
301 永久重定向(浏览器会缓存,SEO 转移权重);302 临时重定向(不缓存)。
Q3:401 和 403 区别?
401 未认证(没登录/没带 token);403 已认证但无权限(登录了但不是管理员)。
Q4:HTTP 无状态怎么理解?怎么解决?
每个请求独立、服务器不保留上下文。解决:Cookie/Session、Token、把状态放请求里(如 JWT 自带信息)。
Q5:HTTPS 为什么安全?
在 HTTP 下加 TLS:① 证书验证服务器身份(防冒充);② 非对称加密协商出对称密钥;③ 后续用对称密钥加密传输(防窃听/篡改)。
Q6:什么是幂等?哪些方法幂等?
重复调用结果一致。GET/PUT/DELETE 幂等,POST 不幂等。
下一篇:Part 4 部署与接口调用——代码写好了,怎么让它真正跑在服务器上、被人访问、并调试通。



