HTTP 基础概念
在前后端分离开发中,最常被问到的问题莫过于:
- GET 和 POST 到底有什么区别?
- PUT、DELETE、PATCH 这些方法什么时候用?
- 为什么有的接口只能用 POST?
HTTP(HyperText Transfer Protocol)是浏览器与服务器之间通信的规则。理解这些请求方式的本质,能帮你写出更规范的接口。
常见请求方式概览
| 方法 | 作用 | 是否修改数据 |
|---|---|---|
| GET | 获取数据 | 否 |
| POST | 提交数据 | 是 |
| PUT | 更新数据(整体替换) | 是 |
| PATCH | 局部更新 | 是 |
| DELETE | 删除数据 | 是 |
| HEAD | 只获取响应头 | 否 |
| OPTIONS | 查询支持的请求方式 | 否 |
核心特性解析
GET 请求
特点
- 主要用于获取资源
- 参数拼接在 URL 后面
- 支持浏览器缓存
- 具有幂等性(多次请求结果一致)
代码示例
axios.get('/api/user/list', {
params: { page: 1, pageSize: 10 }
})
实际发出的请求类似:GET /api/user/list?page=1&pageSize=10
适用场景
- 列表查询
- 详情查看
- 分页数据获取
POST 请求
特点
- 用于提交数据或创建资源
- 数据放在请求体(Body)中
- 默认不会被浏览器缓存
- 安全性相对更高
代码示例
axios.post('/api/user/login', {
username: 'admin',
password: '123456'
})
注意:敏感数据不会暴露在 URL 中。
适用场景
- 用户登录
- 表单提交
- 创建新资源
- 复杂条件的查询
PUT 与 PATCH
PUT 通常用于'整体替换'资源,要求客户端提供完整的新对象,且具备幂等性。
axios.put('/api/user', {
id: 1,
name: '张三',
phone: '123456'
})
PATCH 则用于'局部更新',只修改需要变更的字段。
axios.patch('/api/user/1', {
phone: '999999'
})
DELETE 请求
用于删除指定资源,通常通过 ID 定位。
axios.delete('/api/user', {
params: { id: 1 }
})
GET 与 POST 核心区别
| 对比项 | GET | POST |
|---|---|---|
| 参数位置 | URL | Body |
| 安全性 | 较低(URL 可见) | 较高 |
| 数据长度 | 受 URL 长度限制 | 基本无限制 |
| 是否缓存 | 是 | 否 |
| 是否幂等 | 是 | 否 |
| 主要用途 | 查询 | 提交 |
实战使用指南
Axios 标准写法
推荐统一使用配置对象的方式,便于维护:
axios({
method: 'post',
url: '/api/user/login',
data: {
username: 'admin',
password: '123456'
}
})
何时选择 GET?
✔ 仅查询数据 ✔ 不修改服务器状态 ✔ 参数简单明确
例如:GET /admin/category/page?page=1&pageSize=10
何时选择 POST?
✔ 涉及登录认证 ✔ 提交表单数据 ✔ 创建新资源 ✔ 查询条件复杂(避免 URL 过长)
例如:POST /admin/employee/login
为什么不能乱用 GET?
如果用 GET 处理登录:
GET /login?username=admin&password=123456
密码会直接暴露在浏览器地址栏、历史记录甚至代理服务器日志中。出于安全考虑,涉及敏感信息的操作必须使用 POST。
RESTful 设计规范建议
遵循标准的 HTTP 动词映射操作:
- 查询列表 → GET
- 查询单个 → GET
- 新增 → POST
- 修改 → PUT
- 局部修改 → PATCH
- 删除 → DELETE
总结
- GET 用于查询,不改变服务器数据;POST 用于提交,会修改数据。
- PUT 是整体更新,PATCH 是局部更新。
- DELETE 负责删除资源。
- GET 参数在 URL,POST 参数在 Body。
- 登录、密码及敏感数据务必使用 POST。
一句话概括:GET 是'看',POST 是'改'。


