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 则应提示冲突并拉取最新内容,两者的处理路径完全不同,混用会让重试逻辑陷入循环。重试之前要重新读取资源的最新状态,而不是沿用上一次的条件值。