含义
请求与资源的当前状态冲突,例如重复数据或并发编辑。
常见原因
- 创建已存在的记录(邮箱或名称必须唯一)
- 编辑的资源已被他人修改
- 类似 git 的版本或状态冲突
解决方法
客户端或访问者
获取最新状态,解决冲突或换一个值,然后重试。
网站或 API 的维护者
在响应体中说明冲突的内容。对于基于 ETag 的乐观锁,412 是更准确的状态码。
响应示例
HTTP/1.1
HTTP/1.1 409 Conflict
Date: Tue, 07 Oct 2025 09:30:00 GMT
Server: nginx
Content-Type: application/problem+json
{
"type": "about:blank",
"title": "Conflict",
"status": 409,
"detail": "A user with this email already exists."
} 规范
常见问题
› 重复邮箱应该返回 409 还是 422?
两者都有人用。409 适合与已有数据冲突的情况;422 适合校验框架。保持一致即可。
› 客户端应该自动重试 409 吗?
不应该;冲突通常需要人来做决定。先刷新数据。