423 是什么
423 Locked 是 WebDAV 的锁定语义(RFC 4918 §11.3):目标资源被锁保护,当前请求无权修改。锁由 LOCK 方法创建并携带 Lock-Token,超过 Timeout 后自动失效。现代协作系统多改用应用层乐观锁(版本号、ETag),但 API 返回 423 表示「资源正被他人编辑中」依然常见。
基本信息
| 名称 | 423 Locked |
|---|---|
| 类别 | 4xx |
| 规范 | RFC 4918 §11.3(WebDAV) |
| 相关方法 | LOCK、UNLOCK、PUT |
| 响应线索 | Lock-Token 与 DAV 前置条件信息 |
| 同类实现 | 在线文档协作、CMS 检出(checkout)机制 |
典型使用场景
- 在线协作编辑:别人正在编辑时拒绝覆盖写入
- CMS 与网盘:检出机制锁定文件,未检入前禁止提交
- 客户端重试策略:带锁令牌重发,或提示用户稍后再试
- 排障:区分 403(无权限)与 423(被锁)两类拒绝
- 锁超时设计:评估锁的有效期与自动释放策略
- 分布式客户端:先 LOCK 再 PUT 的正确调用顺序
锁冲突与查看锁信息
锁冲突与查看锁信息
# WebDAV 写入被锁拒绝
curl -si -X PUT https://dav.example.com/docs/spec.docx --data-binary @spec.docx
# HTTP/1.1 423 Locked
# DAV: <opaquelocktoken:...> ← 锁被其他会话持有
# 查看资源当前的锁信息(lockdiscovery 属性)
curl -si -X PROPFIND https://dav.example.com/docs/ -H 'Depth: 1'拒绝写入的几种码
| 状态码 | 含义 | 判断依据 |
|---|---|---|
| 401 与 403 | 未认证或无权限 | 身份与 ACL 配置问题 |
| 423 | 资源被锁 | 响应里带锁令牌 |
| 409 | 版本或路径冲突 | 目录不存在、版本不符 |
| 412 | 前置条件不满足 | If-Match 或 If-Unmodified-Since 失配 |
423 是暂时性拒绝:锁超时或持有者释放后即可重试,客户端应有退避重试而不是直接报失败。
WebDAV 锁带有深度(Depth 为 0 或 infinity)与超时(Timeout 头)属性;把整个集合锁住会影响集合内所有成员。
应用层乐观锁(版本号)与 WebDAV 强制锁解决的是同类问题,但前者冲突时通常返回 409 或 412,不要用 423 的语义去套。
锁有持有者信息:排障时先确认锁是哪个会话或客户端创建的,再决定是等待超时还是联系持有者释放。
非持锁方无法通过 UNLOCK 释放锁;异常退出导致的残留锁只能等超时,因此超时值要结合业务编辑时长设置。