
实际上HTTP协议的请求方法远比我们平时使用的要多得多。让我为你详细梳理一下:
一、HTTP标准方法详解
1.1 RFC 7231定义的9种核心方法
# 主要的HTTP方法及其语义
GET /api/users/123 HTTP/1.1
POST /api/users HTTP/1.1
PUT /api/users/123 HTTP/1.1
DELETE /api/users/123 HTTP/1.1
HEAD
HEAD /api/users/123 HTTP/1.1
OPTIONS /api/users/123 HTTP/1.1
TRACE /api/users/123 HTTP/1.1
CONNECT proxy.example.com:8080 HTTP/1.1
PATCH /api/users/123 HTTP/1.1
🔹 GET
- 用途:检索资源
- 特点:安全、幂等、可缓存
- 请求体:通常无
- 响应体:有
curl -X GET https://api.example.com/users/123
🔹 POST
- 用途:创建资源或提交数据
- 特点:不安全、不幂等
- 示例场景:注册用户、上传文件、提交表单
🔹 PUT
- 用途:完整更新资源
- 特点:不安全、幂等
- 示例:
{
"id": 123,
"name": "张三",
"email": "[email protected]"
}
🔹 DELETE
- 用途:删除资源
- 特点:不安全、幂等
- 示例:
DELETE /articles/456
🔹 HEAD
- 用途:获取响应头(无响应体)
- 典型用例:检查资源是否存在、获取资源更新时间
1.2 不常用但重要的方法
🔸 OPTIONS
// 预检请求示例
fetch('/api/data', {
method: 'POST',
headers: {
'Content-Type': 'application/json'},
body: JSON.stringify({
data: 'test'})
});
// 浏览器会自动发送:
// OPTIONS /api/data
// Access-Control-Request-Method: POST
🔸 PATCH
// 局部更新,只需发送变化的字段
PATCH /users/123
{
"email": "[email protected]"}
🔸 TRACE
用于诊断,回显接收到的请求(存在安全隐患,现代浏览器常禁用)
🔸 CONNECT
用于建立隧道连接,主要在代理场景中使用
二、完整清单:HTTP方法的大家族
2.1 标准化方法汇总表
| 方法 | RFC | 安全性 | 幂等性 | 主流浏览器支持 |
|---|---|---|---|---|
| GET | 7231 | ✅ | ✅ | ✅ |
| POST | 7231 | ❌ | ❌ | ✅ |
| PUT | 7231 | ❌ | ❌ | ✅ |
| DELETE | 7231 | ❌ | ✅ | ✅ |
| HEAD | 7231 | ✅ | ✅ | ✅ |
| OPTIONS | 7231 | ✅ | ✅ | ✅ |
| TRACE | 7231 | ✅ | ✅ | ⚠️受限 |
| CONNECT | 7231 | ❌ | ❌ | ✅ |
| PATCH | 5789 | ❌ | ❌ | ✅ |
2.2 WebDAV扩展方法
PROPFIND /webdav/ HTTP/1.1
PRO
PROPPATCH /webdav/ HTTP/1.1
MKCOL /webdav/new-folder/ HTTP/1.1
COPY /source.txt HTTP/1.1
Destination: /dest.txt
MOVE /old-name.txt HTTP/1.1
Destination: /new-name.txt
LOCK /document.txt HTTP/1.1
UNLOCK /document.txt HTTP/1.1
WebDAV方法详情:
| 方法 | 用途 | 类似操作 |
|---|---|---|
| PROPFIND | 获取资源属性 | 类似GET+元数据 |
| PROPPATCH | 修改资源属性 | 类似PATCH |
| MKCOL | 创建集合(目录) | 类似mkdir |
| COPY | 复制资源 | cp |
| MOVE | 移动/重命名资源 | mv |
| LOCK | 锁定资源 | 文件锁 |
| UNLOCK | 解锁资源 | 释放锁 |
三、实际编程中的使用方法
3.1 Java中使用各种HTTP方法
import cn.hutool.http.HttpRequest;
import cn.hutool.http.Method;
public class AllHttpMethodsExample {
public void demonstrateAllMethods() {
String baseUrl = "https://api.example.com/resources/123";
// 1. GET - 获取资源
String getResult = HttpRequest.get(baseUrl).execute().body();
// 2. POST - 创建资源
String postResult = HttpRequest.post(baseUrl)
.body("{\"name\":\"new resource\"}")
.execute().body();
// 3. PUT - 完整更新
String putResult
转载自CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/Lisonseekpan/article/details/155543133



