首页/网络/协议速查/428 Precondition Required 需要前置条件
HTTP 方法与状态码91 条

428 Precondition Required 需要前置条件

服务器要求请求必须带条件头(如 If-Match)才能执行,用于防止并发覆盖(lost update)。

协议速查网络更新于 2026-10-13

428 是什么

428 Precondition Required 表示服务器要求请求必须带上前置条件才能执行。最典型的用法是并发控制:更新一份文档时,服务器要求客户端带上版本标识,只有版本仍然一致才允许写入。这样两个人同时编辑时,后提交的一方会得到明确提示,而不是静默覆盖掉对方的修改。规范定义在 RFC 6585 第 3 节。

基本信息

状态码428 Precondition Required
语义必须带前置条件头才能执行
规范RFC 6585 §3
典型配套头版本校验类的条件头
客户端应对取得最新版本标识后带条件重试
配对状态码412 表示条件不成立

强制条件更新的服务端行为

强制条件更新的服务端行为
PUT /docs/7                      # 不带条件
→ HTTP/1.1 428 Precondition Required
PUT /docs/7  If-Match: "v5"      # 带上版本条件
→ 200 OK(版本匹配)或 412 Precondition Failed(已被他人修改)

428 与 412 的分工

状态码含义客户端动作
428你没带条件,请带上再试重新获取版本标识并附带条件
412你的条件不成立,资源已变拉取最新内容后合并再提交
409与资源当前状态冲突解决冲突后重试

典型使用场景

  • 协同编辑接口:避免后提交者覆盖先提交者的修改
  • 配置管理平台:强制变更携带版本条件,保证可追溯
  • 自动化脚本改造:把 428 识别为需要补充条件头而不是权限错误
  • 接口文档:把 428 与 412 成对说明,避免调用方误判
  • 数据同步任务:用条件更新检测并发冲突并触发人工介入
这对状态码是搭档:428 说的是「你必须带上条件」,412 说的是「你带的条件不成立」。客户端遇到 428 应当自动补取版本标识后重试,遇到 412 则应提示冲突并拉取最新内容,两者的处理路径完全不同,混用会让重试逻辑陷入循环。重试之前要重新读取资源的最新状态,而不是沿用上一次的条件值。

易错点

  • 把 428 当成权限或格式错误处理,反复重试同样的请求始终失败
  • 客户端把 428 与 412 用同一套重试逻辑,遇到真实冲突时无限循环
  • 接口文档只写 412 不写 428,调用方无法提前处理这类响应
  • 并发控制只靠条件头而不做冲突提示,用户不知道自己的修改被拒
  • 对不该启用强制条件的读接口也要求条件头,增加无谓的交互轮次

数据来源与参考

  • RFC 6585 §3 428 Precondition Required

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌