其他常见 HTTP 方法
除了最常用的四种方法(GET、POST、PUT、DELETE),HTTP 协议还定义了一些较少使用但非常有用的请求方法,常用于调试、部分更新、跨域预检等场景。
1. HEAD 方法:获取响应头
特点:
- 用途:与
GET
类似,但服务器只返回响应头,不返回响应体,用于测试资源是否存在 - 作用:用于检测资源是否存在、是否更新、是否可访问等
- 幂等性:幂等
- 安全性:安全,不会修改服务器数据
示例:
HEAD /api/articles/10 HTTP/1.1
Host: example.com
用途场景:
- 判断文件是否存在
- 检查资源最后更新时间(如
Last-Modified
) - 用于缓存机制优化:节省带宽
2. OPTIONS 方法:获取通信选项
特点:
- 用途:查看服务器支持哪些请求方法
- 常用于:跨域请求的预检(Preflight Request)
- 幂等性:幂等
- 安全性:安全,不影响资源状态
示例:
OPTIONS /api/articles/10 HTTP/1.1
Host: example.com
典型响应头:
Allow: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
用途场景:
- 跨域访问时,浏览器先发起 OPTIONS 请求确认是否允许实际操作
- RESTful API 开发中用于调试或权限控制
3. PATCH 方法:局部更新资源
特点:
- 用途:对资源进行部分更新
- 与 PUT 的区别:PUT 通常是整体替换,而 PATCH 是局部修改
- 幂等性:通常认为是非幂等的(取决于实现方式)
- 安全性:可能改变服务器资源,需注意权限验证
示例:
PATCH /api/articles/10 HTTP/1.1
Content-Type: application/json{"title": "Partially Updated Title"
}
用途场景:
- 修改用户名、昵称、单个字段信息
- 更节省带宽,只需传输改动部分
4. TRACE 方法:请求回显(不常用)
特点:
- 用途:用于回显客户端发送的请求,主要用于测试和诊断网络问题
- 不应有请求体
- 幂等性:幂等
- 安全性:不安全,可能造成 XST(跨站追踪)攻击,现代浏览器通常禁用
示例:
TRACE /api/articles/10 HTTP/1.1
用途场景:
- 已较少使用,主要用于调试底层 HTTP 请求时使用
5. CONNECT 方法:建立隧道连接
特点:
- 用途:用于建立隧道,常用于 HTTPS 的代理传输(SSL/TLS)
- 实际用途:客户端要求代理服务器建立一条 TCP 通道(一般是安全通信)
- 幂等性:非幂等
- 安全性:使用于受控环境中(如代理服务器)
示例:
CONNECT www.example.com:443 HTTP/1.1
Host: www.example.com:443
用途场景:
- 浏览器通过代理访问 HTTPS 站点时,发出 CONNECT 请求
- 用于加密隧道传输,较底层实现
简明对比
方法 | 用途 | 是否返回体 | 幂等性 | 是否常用 | 场景 |
---|---|---|---|---|---|
HEAD | 获取响应头 | ❌ | ✅ | ✅(用于优化) | 检查资源是否存在、是否更新 |
OPTIONS | 探测服务器支持的方法 | ❌ | ✅ | ✅(用于跨域) | 预检请求、REST API 功能检查 |
PATCH | 局部更新资源 | ✅ | ✅/❌ | ✅ | 局部修改用户信息、配置等 |
TRACE | 请求回显 | ✅ | ✅ | ❌ | 调试 HTTP 请求,现代浏览器禁用 |
CONNECT | 建立网络隧道连接 | ✅ | ❌ | ❌ | 浏览器访问 HTTPS 通过代理 |
实践建议
-
选择正确的方法表达语义
- 不要用 POST 做所有事情,PATCH 和 PUT 区分使用
-
合理设计接口
- 用 GET 查询、POST 创建、PUT 修改、DELETE 删除,遵循 RESTful API 规范;
-
安全第一
- GET 请求不要放敏感信息(容易被缓存或记录在日志中)
- TRACE/CONNECT 使用需慎重,避免暴露内部通信
-
配合响应状态码
- 不同方法应有合理的返回码(如 200、201、204、405 等)
理解所有 HTTP 方法,不仅是掌握 Web 开发的基础,也是构建健壮 API、处理前后端通信问题的关键。
在实际开发中,虽然 GET
、POST
占据了大多数使用场景,但 PATCH
、OPTIONS
等方法也具有不可替代的作用,尤其是在现代前端框架和跨域通信中。