系列:后端路线 · 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 部署与接口调用——代码写好了,怎么让它真正跑在服务器上、被人访问、并调试通。