系列:后端路线 · Part 3
框架(Part 2)让你能写接口,但接口”长什么样、前后端怎么对话”由协议决定。本篇讲清 HTTP 与 RESTful API——这是前后端协作的”普通话”。

1. HTTP 是什么?

HTTP(超文本传输协议)是客户端与服务器之间请求/响应的文本协议,无状态(每次请求独立,服务器不记得你上一次是谁——需靠 Cookie/Token 弥补)。默认端口 80,HTTPS = HTTP + TLS 加密,端口 443。

2. 一个请求长什么样

1
2
3
4
5
6
POST /api/user/login HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer <token>

{"username":"zhang","password":"123456"}
  • 请求行:方法 + 路径 + 协议版本
  • 请求头(Header):元信息(Content-Type、Authorization…)
  • 请求体(Body):数据(POST/PUT 才有,通常是 JSON)

响应:

1
2
3
4
HTTP/1.1 200 OK
Content-Type: application/json

{"code":0,"data":{"id":1,"username":"zhang"}}

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
2
3
4
5
GET    /api/users        查列表
GET /api/users/1 查单个
POST /api/users 新建
PUT /api/users/1 整体更新
DELETE /api/users/1 删除

规范要点:

  • 资源用名词复数(/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 部署与接口调用——代码写好了,怎么让它真正跑在服务器上、被人访问、并调试通。