当前位置: 首页 > news >正文

HTTP 请求方法详解:GET、POST、PUT、DELETE 等

在 HTTP 协议中,请求方法(也称为 HTTP 动词)定义了客户端希望对指定资源执行的操作类型。这些方法是 HTTP 报文的核心组成部分,决定了请求的目的和行为。

主要 HTTP 请求方法

1. GET

  • 用途获取资源

  • 特点

    • 只读操作,不应修改服务器状态
    • 数据通过 URL 查询字符串传递(?key=value
    • 可被缓存、收藏、保留在浏览器历史中
    • 有长度限制(约 2048 字符)
  • 示例

    GET /products?id=123 HTTP/1.1
    Host: example.com
    
  • 响应状态码

    • 200 OK(成功)
    • 404 Not Found(资源不存在)
    • 304 Not Modified(资源未改变)

2. POST

  • 用途创建新资源或提交数据

  • 特点

    • 非幂等操作(多次调用产生不同结果)
    • 数据通过请求体传输(支持多种格式)
    • 无长度限制
    • 不可缓存
  • 示例

    POST /users HTTP/1.1
    Host: example.com
    Content-Type: application/json{"name": "John", "email": "john@example.com"}
    
  • 响应状态码

    • 201 Created(资源创建成功)
    • 400 Bad Request(请求错误)
    • 409 Conflict(资源冲突)

3. PUT

  • 用途更新整个资源(全量替换)

  • 特点

    • 幂等操作(多次调用效果相同)
    • 需要提供资源的完整表示
    • 如果资源不存在,可能创建新资源
  • 示例

    PUT /users/123 HTTP/1.1
    Host: example.com
    Content-Type: application/json{"name": "John Updated", "email": "john.new@example.com"}
    
  • 响应状态码

    • 200 OK(更新成功)
    • 204 No Content(更新成功无返回内容)
    • 404 Not Found(资源不存在)

4. DELETE

  • 用途删除指定资源

  • 特点

    • 幂等操作
    • 通常不需要请求体
  • 示例

    DELETE /users/123 HTTP/1.1
    Host: example.com
    
  • 响应状态码

    • 200 OK(删除成功)
    • 202 Accepted(已接受删除请求)
    • 204 No Content(删除成功无返回内容)
    • 404 Not Found(资源不存在)

5. PATCH

  • 用途部分更新资源

  • 特点

    • 非幂等(取决于实现)
    • 只需提供需要修改的字段
  • 示例

    PATCH /users/123 HTTP/1.1
    Host: example.com
    Content-Type: application/json{"email": "john.updated@example.com"}
    
  • 响应状态码

    • 200 OK(更新成功)
    • 204 No Content(更新成功无返回内容)

其他重要方法

6. HEAD

  • 用途:获取资源的元数据(不返回响应体)

  • 特点

    • 与 GET 相同但不返回内容
    • 用于检查资源是否存在或验证缓存
  • 示例

    HEAD /document.pdf HTTP/1.1
    Host: example.com
    

7. OPTIONS

  • 用途:获取资源支持的通信选项

  • 主要应用

    • CORS 预检请求(跨域资源共享)
  • 示例响应

    HTTP/1.1 204 No Content
    Allow: GET, POST, OPTIONS
    Access-Control-Allow-Methods: GET, POST, PUT
    

8. TRACE

  • 用途:回显服务器收到的请求(用于诊断)
  • 注意:存在安全风险(XST攻击),通常禁用

9. CONNECT

  • 用途:建立到目标资源的隧道(用于 HTTPS 代理)

  • 格式

    CONNECT proxy.example.com:443 HTTP/1.1
    Host: proxy.example.com
    

方法特性对比表

方法安全幂等缓存请求体典型状态码RESTful 对应操作
GET不可200, 304获取资源
POST不可201, 400创建资源
PUT不可200, 204全量更新资源
DELETE不可可选200, 204, 404删除资源
PATCH可能不可200, 204部分更新资源
HEAD不可200获取元数据
OPTIONS不可可选204获取选项
TRACE不可不可200诊断
CONNECT不可200建立隧道

关键概念解释

  • 安全方法:不会修改服务器状态(GET、HEAD、OPTIONS)
  • 幂等方法:多次执行效果相同(GET、PUT、DELETE、HEAD)

RESTful API 设计规范

在 RESTful 架构中,HTTP 方法与资源操作有明确对应关系:

资源: /users+----------+---------------------+-----------------+
| 方法     | URL                 | 操作            |
+----------+---------------------+-----------------+
| GET      | /users              | 获取用户列表    |
| POST     | /users              | 创建新用户      |
| GET      | /users/{id}         | 获取单个用户    |
| PUT      | /users/{id}         | 更新整个用户    |
| PATCH    | /users/{id}         | 部分更新用户    |
| DELETE   | /users/{id}         | 删除用户        |
+----------+---------------------+-----------------+

实际应用场景

1. 创建订单(POST)

POST /orders HTTP/1.1
Content-Type: application/json{"product_id": 456,"quantity": 2,"payment_method": "credit_card"
}

2. 更新用户邮箱(PATCH)

PATCH /users/789 HTTP/1.1
Content-Type: application/json{"email": "new.email@example.com"
}

3. 分页获取产品(GET)

GET /products?page=2&per_page=20 HTTP/1.1

4. 删除评论(DELETE)

DELETE /comments/12345 HTTP/1.1
Authorization: Bearer xyz123

安全注意事项

  1. 敏感操作限制

    • 避免使用 GET 执行写操作(防止 CSRF 攻击)
    • 关键操作(如删除)应要求二次确认
  2. 幂等性设计

    • 重要操作(如支付)应设计为幂等
    • 使用唯一 ID 防止重复提交
  3. 方法覆盖攻击防护

    • 某些框架允许通过 _method 参数覆盖方法(如 POST _method=DELETE
    • 确保覆盖方法有与原方法相同的访问控制

浏览器支持情况

方法HTML 表单支持Fetch/XHR 支持
GET
POST
PUT
DELETE
PATCH
HEAD
OPTIONS

注意:HTML 表单只原生支持 GET 和 POST 方法。其他方法需要通过 JavaScript(Fetch/XHR)实现。

实践

  1. 方法选择原则

    创建
    更新
    删除
    操作类型
    查询数据?
    GET
    修改数据?
    POST
    全量更新?
    PUT
    PATCH
    DELETE
  2. API 版本控制

    GET /v2/products/123 HTTP/1.1
    
  3. 状态码规范

    • 成功:2xx
    • 重定向:3xx
    • 客户端错误:4xx
    • 服务器错误:5xx
  4. HATEOAS 应用

    {"id": 123,"name": "Product","_links": {"self": {"href": "/products/123", "method": "GET"},"update": {"href": "/products/123", "method": "PUT"}}
    }
    

理解 HTTP 请求方法的区别和适用场景是设计高质量 API 的基础。正确使用这些方法可以创建出符合 RESTful 原则、易于理解且安全的 Web 服务。

http://www.dtcms.com/a/274147.html

相关文章:

  • Python中类静态方法:@classmethod/@staticmethod详解和实战示例
  • LeetCode 278. 第一个错误的版本
  • 基于生产者消费者模型的线程池【Linux操作系统】
  • mysql中的自增ID
  • 物联网-ESP8266
  • API、MCP Client、MCP Server、LLM之间的业务逻辑关系
  • 医疗预约系统中的录音与图片上传功能实现:Vue3+Uniapp 实战
  • 在线重装 Proxmox VE
  • Swift中SwiftyJSON使用详情
  • 墙裂推荐!McpStore库三行代码为Agent添加MCP能力
  • 业务建模如何让金融数字化转型 “轻” 装上
  • CentOS7环境安装包部署并配置MySQL5.7
  • 什么是proxy
  • 使用浏览器inspect调试wx小程序
  • 构建基于表单配置的 Jenkins 测试项目(接口、UI、APP、Jmeter)
  • 加速市场反馈,助力产品迭代升级​
  • 如何使用 Python 删除 Excel 中的行、列和单元格 – 详解
  • IAR携手矽力杰与普华基础软件,共推RISC-V车规芯片高安全应用落地
  • docker 启动中间件
  • Python 数据建模与分析项目实战预备 Day 2 - 数据构建与字段解析(模拟简历结构化数据)
  • 【Python练习】038. 编写一个函数,检查一个链表是否有环
  • PHY模式,slave master怎么区分
  • 力扣网编程134题:加油站(双指针)
  • Android15 无法接收到应用自身发出的广播分析解决
  • 【牛客刷题】dd爱科学1.0
  • Java 大视界 -- Java 大数据在智能医疗远程手术机器人操作数据记录与分析中的应用(342)
  • 从静到动的创作革命:Midjourney Video V1重塑AI影像叙事
  • 滑动窗口-3.无重复字符的最长子串-力扣(LeetCode)
  • 【Linux】虚拟内存的概念和布局
  • UI自动化神器:Playwright元素定位方法!