为什么大厂逐渐弃用 PUT、DELETE 请求?

简介: 在大厂实践中,PUT/DELETE 因网关拦截、跨域预检、安全审计、微服务路由复杂及框架兼容等问题,正被全面弃用。主流方案统一采用 GET + POST(语义化路径如 `/delete`),兼顾安全性、可观测性与工程效率,成为企业级API的事实标准。(239字)

在现代互联网架构、微服务、网关体系与安全规范下,HTTP 标准方法 PUT / DELETE 正在被大量大厂逐步弃用,转而统一使用 POST + 接口语义 的方案。这不是技术倒退,而是工程化、安全性、兼容性、运维成本综合权衡后的最佳实践。

下面从最核心、最真实的企业级原因讲清楚:


一、网关、防火墙、CDN 不友好(最致命)

绝大多数企业的API 网关、WAF、防火墙、CDN、代理服务器,默认只放行:

  • GET
  • POST

PUT / DELETE 会出现:

  1. 被拦截、过滤、丢弃
  2. 缓存策略异常
  3. 跨域预检(OPTIONS)频繁失败
  4. 老旧硬件不支持非标准方法

为了兼容全链路,大厂直接选择:全部用 POST,避免不可控风险


二、跨域场景带来额外性能损耗

浏览器对 非简单请求(PUT/DELETE/PATCH 等)会强制触发:
👉 OPTIONS 预检请求

后果:

  • 接口请求量翻倍
  • 高并发场景性能下降
  • 网关压力增加
  • 移动端弱网环境更容易超时

POST 是简单请求,无预检,天然更快、更稳定。


三、安全审计与风控体系不兼容

企业安全团队要求:

  • 所有写操作必须记录日志
  • 所有风险操作必须鉴权
  • 所有请求必须可追踪、可回放

PUT/DELETE 存在问题:

  1. 请求体支持不统一(有的框架不允许 PUT 带 body)
  2. 风控系统默认只监控 POST/GET
  3. 安全策略无法统一拦截危险操作
  4. 日志系统难以标准化解析

最终安全部门强制要求:统一 POST


四、微服务 & 网关路由规则难以统一

微服务架构中:

  • GET:查询
  • POST:新增/操作
  • PUT:全量更新
  • DELETE:删除
  • PATCH:部分更新

方法太多 → 网关配置复杂、路由规则混乱

大厂统一规范:
只用 GET(查)+ POST(操作/写/改/删)
删除、修改、上传、异步任务全部用 POST。

路由规则极简,维护成本暴跌。


五、框架兼容性差,容易踩坑

不同语言、框架对 PUT/DELETE 支持不一致:

  • 某些老版本框架 PUT 不支持请求体
  • 某些网关 丢弃 DELETE 的 body
  • 某些序列化库 无法解析 PUT 参数
  • 爬虫/测试工具 对非标准方法支持弱

统一 POST = 全平台兼容,零坑


六、可观测性、监控、告警更简单

运维、SRE 团队喜欢统一方法:

  • 统计写请求:只看 POST
  • 统计查询:只看 GET
  • 告警规则:只配置两种方法
  • 链路追踪:格式统一

如果混入 PUT/DELETE,监控面板会变得复杂且容易出错。


七、企业级接口规范:删除/更新不代表“危险动作”

RESTful 认为:

  • DELETE = 删除资源
  • PUT = 覆盖资源

但真实业务中:

  • 删除大多是 逻辑删除(is_deleted=1)
  • 更新大多是 部分更新
  • 上传是 POST + 文件
  • 批量删除是 POST 批量操作

动作语义 > HTTP 方法语义
所以企业直接用:

POST /api/user/delete
POST /api/user/update
POST /api/user/batch-delete

清晰、安全、无歧义。


八、最真实的大厂现状

你现在接触的 阿里、腾讯、字节、美团、京东、拼多多、快手 等:

90% 后端接口只使用 GET + POST
✅ PUT/DELETE 基本只存在于内部基础设施
✅ 对外 API、网关、前端调用一律禁用
✅ 安全规范明确禁止非 GET/POST 方法


最终总结(一句话记住)

PUT/DELETE 被弃用,不是因为它们不对,而是因为工程化、兼容性、安全性、运维成本太高。统一使用 GET + POST,是企业级架构最稳定、成本最低、风险最小的方案。


相关文章
|
2月前
|
XML IDE Java
Spring Boot 4 王炸新特性:Bean 注册新姿势 BeanRegistrar,少写一半代码
Spring Boot 4 正式推出 `BeanRegistrar`——动态注册 Bean 的终极解法!告别冗长 `@Bean` + `@Conditional` 套娃,12 行代码精准按配置注册(如 Email/SMS),启动仅加载所需 Bean,性能提升、可读性飙升。从“声明”迈向“编程式容器”,减负不止 50%。
238 2
|
2月前
|
人工智能 API 机器人
OpenClaw 用户部署和使用指南汇总
本文档为OpenClaw(原MoltBot)官方使用指南,涵盖一键部署(阿里云轻量服务器年仅68元)、钉钉/飞书/企微等多平台AI员工搭建、典型场景实践及高频问题FAQ。同步更新产品化修复进展,助力用户高效落地7×24小时主动执行AI助手。
26134 182
|
2月前
|
Java 应用服务中间件 开发者
Spring Boot 4.0官宣: 弃用 Undertow:Tomcat笑麻了
Spring Boot 4.0.0 M2 正式移除 Undertow 内嵌支持,主因是其未适配 Servlet 6.1 规范,而 Spring Boot 4 强制依赖该规范。本文解析技术动因、迁移影响及平滑过渡方案(推荐切回 Tomcat 或改用 Jetty),助力开发者顺利升级。(239字)
627 1
Spring Boot 4.0官宣: 弃用 Undertow:Tomcat笑麻了
|
9天前
|
人工智能 Linux API
VS Code 1.113 发布:Agent 与 Chat 体验全面升级!
VS Code 1.113 正式发布!聚焦AI开发体验升级:全面增强Agent能力(支持CLI/Claude代理的MCP、会话分支、嵌套子代理、调试日志),优化Chat体验(统一自定义编辑器、模型推理努力直调、图像预览查看器),大幅提升智能编程效率。
267 12
|
16天前
|
SQL 关系型数据库 MySQL
字节一面:挂在了 MySQL 上?
面试常考的MySQL `IN` 查询,实则暗藏玄机:无固定个数限制,真正瓶颈是`max_allowed_packet`(默认4–16MB);但性能临界点远早于报错——过长列表易致索引失效、全表扫描。推荐分批查询(如每批1000)、临时表JOIN或Redis预过滤。知其然更需知其所以然。
110 5
|
30天前
|
Rust 中间件 API
BustAPI:当 Python 遇上 Rust,Web 框架也能“起飞“
BustAPI 是融合 Python 易用性与 Rust 高性能的 Web 框架:基于 PyO3 封装 Actix-Web,保留 Flask 风格语法,请求性能提升 10–50 倍;支持自动文档、类型校验、异步、中间件等生产级功能,迁移零成本,部署极简——让 Python 服务轻松应对高并发。
201 5
|
1月前
|
消息中间件 存储 NoSQL
Redis 十大经典使用场景 - Go 语言实战指南
本文详解 Redis 在 Go 中的 10 大核心应用场景:缓存、会话存储、限流、排行榜、消息队列、发布订阅、实时分析、分布式锁、地理位置、购物车,并提供完整可运行代码与最佳实践,助你高效构建高性能应用。(239字)
179 1
|
30天前
|
Shell C++ iOS开发
VS Code 如何更改默认终端?4种方法详解
本文详解VS Code中切换默认终端的4种方法:命令面板快速设置、启动配置文件图标直观操作、终端内命令即时切换、设置UI持久化配置,并附常见问题解答,助你高效定制开发环境。(239字)
446 1
下一篇
开通oss服务