在 Web 开发中,我们每天都在和 HTTP 打交道。不论是访问网页、提交表单,还是操作 RESTful API,底层的通信都依赖 HTTP 协议。
HTTP(超文本传输协议,HyperText Transfer Protocol)是 Web 世界的基石,是浏览器和服务器之间通信的基础协议。HTTP 方法定义了客户端想要对服务器资源执行的操作。其中最核心的部分之一,就是请求方法(Request Method)。
本文将详细介绍 HTTP 中最常用的四种请求方法:GET
、POST
、PUT
和 DELETE
,帮助你真正理解它们的用途、特点与区别。
一、什么是 HTTP 方法?
HTTP 方法是用来描述客户端希望对指定资源执行的哪种操作的一组标准指令。它们出现在 HTTP 请求报文的第一行:
最常见的操作包括:
- 获取数据(GET)
- 提交数据(POST)
- 更新数据(PUT)
- 删除数据(DELETE)
这四种方法在 RESTful 架构中尤为重要,它们分别对应着"增删改查"的常规操作。
二、GET 方法:获取资源
特点:
- 用途:请求服务器上的资源(数据、页面、文件等)
- 是否有请求体:不应有请求体(body)
- 参数传递 :通过 URL 查询参数(
?key=value
) - 幂等性:幂等(调用多次不会造成资源变化)
- 安全性:不会对服务器数据造成实质影响
示例:
http
GET /api/articles?id=10 HTTP/1.1
Host: example.com
浏览器场景:
- 点击链接
- 刷新页面
- 获取用户信息:GET /users/123
- 查询商品列表:GET /products?category=books
三、POST 方法:提交资源
特点:
- 用途:创建新资源或提交数据(如表单数据、JSON、文件上传)
- 参数传递:通常在请求体(body)中
- 幂等性 :非幂等(每次请求都可能导致不同结果)
- 安全性:可能会更改服务器状态(例如添加一条记录)
示例:
http
POST /api/comments HTTP/1.1
Host: example.com
Content-Type: application/json
{
"article_id": 10,
"content": "Hello World !"
}
常见用法:
- 用户注册 / 登录
- 提交评论、订单
- 上传文件
四、PUT 方法:更新资源
特点:
- 用途 :
完整地
更新已存在的资源,需提供完整资源内容
- 参数传递:通常在请求体中
- 幂等性:幂等(多次请求结果相同)
- 安全性:修改服务器资源,有风险需谨慎使用
- 注意事项:PUT 一般是对资源
整体替换
,部分更新建议用PATCH
方法。
示例:
http
PUT /api/articles/10 HTTP/1.1
Content-Type: application/json
{
"title": "Updated Title",
"content": "Updated content."
}
五、DELETE 方法:删除资源
特点:
- 用途:删除指定资源
- 幂等性:幂等(即使资源不存在,重复执行也不会报错)
- 安全性:直接删除数据,有不可逆性,需加权限控制
示例:
http
DELETE /api/articles/10 HTTP/1.1
Host: example.com
资源删除后通常返回状态码 204(No Content)
六、对比总结
方法 | 用途 | 参数位置 | 幂等性 | 安全性 | 常见用途 |
---|---|---|---|---|---|
GET | 获取资源 | URL | ✅ | ✅ | 查询数据、查看页面 |
POST | 创建资源 | 请求体 | ❌ | ❌ | 表单提交、上传数据 |
PUT | 更新资源 | 请求体 | ✅ | ❌ | 更新用户信息、配置等 |
DELETE | 删除资源 | URL / 体 | ✅ | ❌ | 删除记录或资源 |
七、RESTful 风格中的应用
RESTful API 通常采用如下方式区分不同操作:
操作 | 请求方式 | 路径示例 |
---|---|---|
查询列表 | GET | /api/articles |
查询单个 | GET | /api/articles/10 |
新建数据 | POST | /api/articles |
修改数据 | PUT | /api/articles/10 |
删除数据 | DELETE | /api/articles/10 |
通过 HTTP 方法 + URL 的组合,我们可以清晰、语义化地表达各种操作。
八、注意事项
-
表单默认只支持 GET 和 POST
- PUT 和 DELETE 通常通过 JavaScript(如
fetch
、axios
)实现。 - Django、Laravel 等框架提供 method override 支持。
- PUT 和 DELETE 通常通过 JavaScript(如
-
跨域问题(CORS)
- PUT/DELETE 请求通常触发浏览器预检(OPTIONS 请求)
- 需后端正确配置
Access-Control-Allow-Methods
-
幂等操作的理解
- DELETE/PUT 是幂等的,但仍可能有副作用(如日志记录、积分扣除等)
理解 GET、POST、PUT、DELETE 的用途和区别,有助于更合理地设计和调用 API,编写语义清晰、结构清楚的接口,以及避免错误地使用请求方法,导致数据错乱或安全问题。