HTTP 请求方法与参数上传形式的关系
核心原则
请求方法决定数据存储位置(URL/请求体),上传形式决定数据编码方式。二者无强制绑定,但存在推荐组合。
请求方法与上传形式搭配
GET 方法
- 仅支持 URL 参数(查询参数或路径参数)
- 示例:
GET /users?id=123
或GET /users/123
- 限制:HTTP 规范禁止 GET 使用请求体传递数据
POST 方法
- JSON:结构化数据(如
{"name":"张三"}
) - form-data:文件上传或混合数据(如表单+图片)
- x-www-form-urlencoded:简单键值对(如
name=张三&age=20
) - 示例:文件上传用
POST /upload
+Content-Type: multipart/form-data
- JSON(application/json):前后端分离项目的主流选择,请求体中放 JSON 字符串,例如
POST /users
,请求体为{"name":"张三","age":20}
。👉 场景:传递结构化数据(如创建用户、提交复杂表单)。 - form-data(multipart/form-data):唯一支持 文件上传 的形式,同时可混合传递文本参数,例如 “提交用户资料 + 上传头像”。👉 场景:文件上传(图片、文档)、文本 + 二进制混合数据。
- x-www-form-urlencoded:传统表单提交的默认形式,请求体中数据以
key1=value1&key2=value2
编码,例如POST /login
,请求体为username=zhangsan&password=123
。👉 场景:简单键值对提交(如登录、注册表单,无文件)。 - URL 路径 / 查询参数:可配合使用,例如
POST /orders/123/pay?type=alipay
(123
是路径参数,type
是查询参数)。👉 场景:补充传递简单标识或条件(核心数据仍放请求体)。
PUT 方法
- 与 POST 类似,侧重全量更新资源
- 推荐 JSON 格式(如
PUT /users/123
+{"name":"李四"}
)
DELETE 方法
- 通常用 URL 参数(路径或查询)
- 示例:
DELETE /users/123
或DELETE /users?id=123
默认上传形式场景
浏览器表单
- 默认
x-www-form-urlencoded
- 文件上传需显式设置
enctype="multipart/form-data"
API 调用(Axios/Fetch)
- 默认
application/json
- 需手动配置其他类型(如
headers: {"Content-Type": "..."}
)
工具(Postman)
- GET:自动拼接 URL 查询参数
- POST:默认
form-data
,需切换其他类型
注意事项
- GET + 请求体:违反规范,多数服务端不支持
- DELETE + 请求体:虽协议允许,但实际较少使用
- 文件上传:仅
multipart/form-data
支持二进制流
推荐组合表
方法 | 语义 | 推荐形式 | 典型场景 |
---|---|---|---|
GET | 查询 | URL 参数 | 分页、搜索 |
POST | 创建/提交 | JSON/form-data | API 调用、文件上传 |
PUT | 全量更新 | JSON | 用户资料更新 |
DELETE | 删除 | URL 参数 | 删除资源 |
更详细可参考:https://www.cnblogs.com/blogtech/p/18010147https://www.cnblogs.com/blogtech/p/18010147