前端进阶之旅前端进阶之旅
  • 基础篇HTML/CSS/JS 打底
  • 进阶篇原理与工程化
  • 高频篇面试最常问的那批
  • 精选篇按模块收敛的总结
  • 手写篇常考代码手写实现
  • 面经篇真实面试问题复盘
  • AI 篇NEWAI 时代的前端考点
  • 历年面经NEW按年份追踪真实考点
  • 每日一题每天一道,攒手感
  • 专项自测100 题快速查漏
  • 小程序题库小程序专项刷题
  • 算法题库NEW在线编码即时判题
  • 知识卡片NEW碎片时间过考点
  • 面试题大全常见问题解析
  • AI 答疑NEW随时提问,即时解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • AI 定制路线NEW按你的简历现排
  • AI 知识地图NEW串起全站知识点
  • 原理篇React / Vue 源码拆解
  • HTTP从报文一路讲到 HTTPS
  • 浏览器渲染、事件循环、进程
  • 计算机基础Linux、网络、操作系统
  • 设计模式23 种模式怎么用
  • Node学习指南从环境搭建到服务端
  • NPM工作流script、依赖与发布
  • Docker容器化部署上手
  • Canvas图形与动画实战
  • 前端系统进阶学习大型项目工程化
  • 前端综合文章长期沉淀的实践文
  • 思维导图知识点全景图
  • 学习路线按图索骥不跑偏
  • AI 热点NEWAI 每日动态
  • 公众号动态公众号历史文章
  • 博客动态站长的技术博客
  • 开发者导航常用工具与文档站
  • 基础篇HTML/CSS/JS 打底
  • 进阶篇原理与工程化
  • 高频篇面试最常问的那批
  • 精选篇按模块收敛的总结
  • 手写篇常考代码手写实现
  • 面经篇真实面试问题复盘
  • AI 篇NEWAI 时代的前端考点
  • 历年面经NEW按年份追踪真实考点
  • 每日一题每天一道,攒手感
  • 专项自测100 题快速查漏
  • 小程序题库小程序专项刷题
  • 算法题库NEW在线编码即时判题
  • 知识卡片NEW碎片时间过考点
  • 面试题大全常见问题解析
  • AI 答疑NEW随时提问,即时解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • AI 定制路线NEW按你的简历现排
  • AI 知识地图NEW串起全站知识点
  • 原理篇React / Vue 源码拆解
  • HTTP从报文一路讲到 HTTPS
  • 浏览器渲染、事件循环、进程
  • 计算机基础Linux、网络、操作系统
  • 设计模式23 种模式怎么用
  • Node学习指南从环境搭建到服务端
  • NPM工作流script、依赖与发布
  • Docker容器化部署上手
  • Canvas图形与动画实战
  • 前端系统进阶学习大型项目工程化
  • 前端综合文章长期沉淀的实践文
  • 思维导图知识点全景图
  • 学习路线按图索骥不跑偏
  • AI 热点NEWAI 每日动态
  • 公众号动态公众号历史文章
  • 博客动态站长的技术博客
  • 开发者导航常用工具与文档站
首页程序员面试题库HTTP idempotent 幂等方法 PUT DELETE
HTHTTPHTTP 语义

HTTP 中哪些方法是幂等的,PUT 和 DELETE 的幂等性在重试时意味着什么?

HTTP 规范中幂等方法包括 GET、HEAD、PUT、DELETE、OPTIONS、TRACE;POST 和 PATCH 不保证幂等。幂等意味着重试同一个请求不会造成额外副作用,客户端可安全重发。

前端进阶之旅 · 一题精讲更新于 2026.09.05
HTTP#HTTP 语义
先看核心答案
理解线索

幂等性与重试判断线索

  1. 定义一次与多次相同请求的预期服务器效果一致
  2. 幂等方法GET、HEAD、PUT、DELETE、OPTIONS、TRACE
  3. 非幂等POST 多次提交产生多条记录,PATCH 视操作而定

规范只约束语义,服务器实现违规时幂等假设即失效。

核心回答

先记住这个答案

幂等指同一请求执行一次与执行多次,对服务器的预期效果相同。规范上 GET、HEAD、PUT、DELETE、OPTIONS、TRACE 是幂等的,POST、PATCH 不保证。PUT 是整体替换,重复发送同一报文结果不变;DELETE 删除后资源不存在,再删一次状态仍是不存在。因此网络超时或响应丢失时,客户端可以直接重试这些方法而不必担心重复创建或重复扣减,但要注意每次的响应状态码可能不同,比如 DELETE 第一次返回 200,重试返回 404。

  • 安全方法全幂等,PUT、DELETE 也幂等
  • POST 与 PATCH 不保证幂等
  • 幂等重试安全,但响应码可能逐次不同

幂等语义的定义与重试机制

HTTP 规范按客户端意图定义幂等:同一请求发一次和发多次,对服务器资源的预期效果相同。所有安全方法天然幂等,因为读操作不改变资源;PUT 的语义是用请求体整体替换目标资源,同一报文重放后资源内容仍是这份报文,效果不叠加;DELETE 的语义是让资源不存在,删除一次后再删,资源依然不存在,终态一致。

这套语义直接支撑重试机制:当请求因超时、连接重置而结果未知时,客户端对幂等方法可以直接重发,无需先查询状态。即便原请求实际已到达并生效,重放也只是再次到达同一终态。这正是 HTTP 层把重试安全性与方法语义绑定的原因,而 POST 创建子资源时重放会创建多份,所以规范不承诺其幂等。

移动端弱网下重试订单地址更新接口

一个移动端应用调用 PUT /users/42/address 整体覆盖收货地址。弱网环境下客户端发出请求后 5 秒未收到响应,约束是无法确认请求是否到达服务器。决策是带指数退避直接重发同一报文,最多三次。结果是:若原请求已生效,重放只是再次写入相同地址,最终状态正确;若未到达,重试补上写入,两种路径结果一致。

这样处理成立的前提是接口确实按 PUT 语义实现为整体替换而非追加。若服务端把该端点写成在地址列表里新增一条,重试就会产生重复地址,幂等假设被实现打破。团队因此在接口评审中校验:同一报文连续执行两次后资源状态是否与执行一次相同,作为上线检查项。

幂等假设失效的条件与代价

幂等性有三类常见失效条件。其一,服务器不遵守语义,在 DELETE 端点里做计数扣减或在 PUT 端点里追加数据,规范无法强制实现。其二,把响应码当作幂等性判断依据:DELETE 首次返回 200、重试返回 404,响应不同但资源终态一致,仍属幂等,客户端重试逻辑要把 404 视为可接受结果而非失败。其三,并发交错,另一个请求在两次重试之间修改了同一资源,终态可能与预期不同,这不是幂等性能解决的问题。

对应处理:客户端对幂等方法重试时按终态而非单次响应码判断成功,例如 DELETE 重试收到 404 视为已删除。对需要防止并发覆盖的更新,用 If-Match 配合 ETag 做条件请求,冲突时收到 412 再决定重新读取合并。代价是多一次状态确认或冲突处理逻辑,但换得了重试与并发下的确定性。

回答前,多想一步

容易答错的地方

认为幂等要求每次响应完全相同
幂等只约束服务器端资源的预期效果,不约束响应。DELETE 第一次返回 200,之后返回 404,响应不同但资源终态一致,依然满足幂等定义,重试逻辑应识别这种差异。
认为用了 PUT 或 DELETE 就天然安全重试
规范只定义语义,不强制实现。若服务器在 DELETE 端点里写审计扣费、在 PUT 端点里追加记录,重试就会产生重复副作用。重试前应确认接口实现确实符合幂等语义。
试着用自己的话回答

面试官还会怎么问?

为什么 POST 不幂等却常被要求支持重试?

POST 语义是向服务器提交数据由服务端处理,典型是创建子资源,重放会创建多份,规范因此不承诺幂等。工程上要靠业务层手段如 Idempotency-Key 或唯一约束实现可重试,这已超出 HTTP 方法语义本身。

GET 重试绝对安全吗?

语义上是安全的:GET 是安全且幂等方法,重试不改变资源。但若服务器实现违规,在 GET 处理中写日志计数之外的副作用,重试就有影响。另外 GET 响应可被缓存,重试可能命中缓存而非到达源站。

PUT 重试与 PATCH 重试有何差别?

PUT 整体替换,同一报文重放终态相同,可直接重试。PATCH 携带的是修改操作,若操作是增量式(如数量加一),重放会重复应用导致结果叠加;若补丁本身是幂等操作则可安全重试,但规范不作保证,需逐个确认。

从一道题,走向一组知识

把知识连起来

HTTP 语义

HTTP 中什么是安全方法(safe method),为什么 GET 和 HEAD 被定义为安全方法?

安全方法的定义是理解为什么所有安全方法天然幂等的前置概念。

HTTP 语义

HTTP 中 PUT 与 PATCH 的语义差异是什么,分别适合怎样的资源更新?

PUT 与 PATCH 的语义差异直接决定两者重试安全性不同,是本题的延伸对比。

参考资料

  • Idempotent

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. 幂等语义的定义与重试机制
  3. 移动端弱网下重试订单地址更新接口
  4. 幂等假设失效的条件与代价
  5. 容易答错的地方
  6. 面试官还会怎么问
  7. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑