207 是什么
207 Multi-Status 是 WebDAV 批量操作的响应码:一个响应体里携带多个子项各自的处理结果,用 XML 结构表达。它代表「请求已经被处理」,而不是「所有子项都成功」——某个文件删掉了、另一个文件因为被锁定而失败,这种混合结果正是它存在的意义。规范定义在 RFC 4918 第 11.1 节。
基本信息
| 状态码 | 207 Multi-Status |
|---|---|
| 语义 | 批量操作逐项报告结果 |
| 规范 | RFC 4918 §11.1 |
| 内容类型 | XML 的多状态结构 |
| 出现场景 | WebDAV 的批量属性查询与批量更新 |
| 判读要求 | 必须解析响应体才能知道各项结果 |
多状态响应片段
多状态响应片段
<D:multistatus xmlns:D="DAV:">
<D:response>
<D:href>/a.txt</D:href>
<D:status>HTTP/1.1 200 OK</D:status>
</D:response>
<D:response>
<D:href>/b.txt</D:href>
<D:status>HTTP/1.1 423 Locked</D:status>
</D:response>
</D:multistatus>子项状态读法
| 子项状态 | 含义 | 处理建议 |
|---|---|---|
| 200 | 该项处理成功 | 继续下一项 |
| 404 | 目标不存在 | 确认路径后决定是否忽略 |
| 423 | 资源被锁定 | 等待释放或先解锁再重试 |
| 403 | 权限不足 | 检查账号对该路径的权限 |
典型使用场景
- 批量删除或移动文件:逐项确认哪些成功、哪些失败
- 批量属性查询:一次取回多个资源的属性
- 自动化同步脚本:按子项结果分别处理失败项
- 监控与告警:避免只统计外层状态码而漏掉部分失败
- 客户端开发:实现逐项重试而不是整体重放
207 的外层状态是成功,子项却可能失败。把 207 直接当 200 处理,会让批量操作里的失败被静默吞掉:表面上任务报告成功,实际上有一部分文件没有生效,这类问题往往在很久之后才被发现。
解析这类响应要以命名空间为准:元素前缀可以任意命名,只按前缀字符串匹配的话,换一个服务端实现就会全部解析失败。批量操作前建议先落一份目标清单,失败项单独重试,而不是把整个批次重放一遍,这样既省时间也避免重复执行已成功的项。