RFC 4918 第11-25章技术要点总结
本文档总结RFC 4918第11-25章的关键技术内容,包括状态码扩展、XML定义、合规性要求等。
11. Status Code Extensions (HTTP/1.1状态码扩展)
WebDAV引入了5个新的HTTP状态码:
11.1 207 Multi-Status
用途: 批量操作的复合响应
场景: PROPFIND、PROPPATCH、COPY、MOVE、DELETE
示例:
HTTP/1.1 207 Multi-Status
Content-Type: application/xml
<D:multistatus xmlns:D="DAV:">
<D:response>
<D:href>/resource1</D:href>
<D:status>HTTP/1.1 200 OK</D:status>
</D:response>
<D:response>
<D:href>/resource2</D:href>
<D:status>HTTP/1.1 403 Forbidden</D:status>
</D:response>
</D:multistatus>
11.2 422 Unprocessable Entity
含义: 请求格式正确但语义错误
场景: XML格式正确但违反业务规则
11.3 423 Locked
含义: 目标资源被锁定
场景: 尝试修改被锁定的资源
11.4 424 Failed Dependency
含义: 由于前一个操作失败,当前操作无法执行
场景: 批量操作中的依赖失败
11.5 507 Insufficient Storage
含义: 服务器存储空间不足
场景: 无法存储资源或完成操作
12. Use of HTTP Status Codes (HTTP状态码的使用)
12.1 412 Precondition Failed
在WebDAV中用于:
- If头条件不满足
- Overwrite: F但目标资源存在
- 锁令牌验证失败
12.2 414 Request-URI Too Long
当URI过长超过服务器限制时返回。
13. Multi-Status Response (多状态响应)
核心概念
多状态响应允许服务器返回多个资源的状态信息。
结构:
<multistatus>
<response>*
<responsedescription>?
</multistatus>
13.1 响应头
- Content-Type: application/xml
- 可能包含Location头(对于创建的资源)
13.2 处理重定向的子资源
服务器应该遵循重定向并报告最终资源的状态。
13.3 内部状态码
多状态响应中的状态码可以是任何有效的HTTP状态码。
14. XML Element Definitions (XML元素定义)
WebDAV定义了完整的XML词汇表,包括:
主要元素类别
1. 请求元素:
propfind- 属性查找请求propertyupdate- 属性更新请求lockinfo- 锁信息prop- 属性列表
2. 响应元素:
multistatus- 多状态响应response- 单个资源响应propstat- 属性状态
3. 属性元素:
- 见第15章详细说明
4. 错误元素:
- 见第16章详细说明
15. DAV Properties (DAV属性)
WebDAV定义了标准属性集,分为活属性和死属性。
核心活属性
| 属性名 | 类型 | 说明 |
|---|---|---|
creationdate | 活 | 资源创建日期 |
displayname | 活/死 | 显示名称 |
getcontentlanguage | 活 | 内容语言 |
getcontentlength | 活 | 内容长度 |
getcontenttype | 活 | 内容类型 |
getetag | 活 | 实体标签 |
getlastmodified | 活 | 最后修改时间 |
lockdiscovery | 活 | 锁发现信息 |
resourcetype | 活 | 资源类型 |
supportedlock | 活 | 支持的锁类型 |
属性特性
- 活属性: 由服务器计算和维护
- 死属性: 由客户端设置,服务器存储
- 受保护属性: 不能通过PROPPATCH修改
16. Precondition/Postcondition XML Elements (前置/后置条件元素)
用途
提供机器可读的错误信息。
常见前置条件
lock-token-matches-request-uri- 锁令牌匹配lock-token-submitted- 需要提交锁令牌no-conflicting-lock- 无冲突的锁no-external-entities- 不允许外部实体preserved-live-properties- 保留的活属性propfind-finite-depth- PROPFIND深度限制
17. XML Extensibility in DAV (DAV中的XML可扩展性)
扩展原则
- 添加新元素: 可以在任何位置添加新的XML元素
- 添加新属性: 可以定义新的DAV属性
- 忽略未知元素: 客户端和服务器必须忽略不理解的元素
- 命名空间: 使用XML命名空间避免冲突
最佳实践
- 使用自己的命名空间定义扩展
- 保持向后兼容性
- 文档化扩展行为
18. DAV Compliance Classes (DAV合规性类别)
Class 1 (基本WebDAV)
必需支持:
- PROPFIND / PROPPATCH方法
- MKCOL方法
- GET / HEAD 对集合的扩展
- PUT / DELETE的扩展
- COPY / MOVE方法
- DAV头返回"1"
- 所有第15章定义的属性
- 实体标签 (ETags)
Class 2 (包含锁定)
包括Class 1,加上:
- LOCK / UNLOCK方法
- 支持Timeout头
- 支持If头
- Lock-Token头
- DAV头返回"1, 2"
Class 3 (有序集合)
包括Class 1,加上:
- 有序集合的支持
- DAV头返回"1, 3" 或 "1, 2, 3"
19. Internationalization Considerations (国际化考虑)
关键要点
- UTF-8编码: XML使用UTF-8编码
- xml:lang属性: 支持语言标注
- 属性值: 可以包含Unicode字符
- URL编码: 正确处理国际化URL
20. Security Considerations (安全考虑)
主要安全问题
1. 认证和授权:
- 必须使用适当的认证机制
- 实施细粒度的访问控制
- 保护敏感属性
2. 拒绝服务 (DoS):
- 限制Depth: infinity请求
- 实施资源配额
- 超时机制
3. 信息泄露:
- 小心处理错误消息
- 保护锁令牌
- 适当的授权检查
4. XML安全:
- 防止XML实体扩展攻击
- 限制XML文档大小
- 禁用外部实体
21. IANA Considerations (IANA注意事项)
注册的内容
- DAV URI方案注册: "opaquelocktoken"
- HTTP头注册: DAV, Depth, Destination等
- HTTP状态码: 207, 422, 423, 424, 507
- XML命名空间: "DAV:"
22-24. Acknowledgements / Contributors / Authors (致谢/贡献者/作者)
RFC 4918是众多WebDAV社区成员共同努力的成果,特别感谢:
- RFC 2518的原作者
- WebDAV工作组成员
- 实现者和早期采用者的反馈
25. References (参考文献)
25.1 规范性参考文献
- RFC 2119: 关键词定义
- RFC 2616: HTTP/1.1
- RFC 3986: URI通用语法
- REC-XML: XML 1.0规范
- REC-XML-NAMES: XML命名空间
25.2 信息性参考文献
- RFC 2518: WebDAV 1.0 (被本规范废弃)
- RFC 3253: WebDAV版本管理
- RFC 3744: WebDAV访问控制
- 其他相关RFC
总结: 第11-25章涵盖了WebDAV的实现细节、合规性要求、安全考虑和国际化支持。这些章节对于实现完整的WebDAV服务器或客户端至关重要。核心要点包括正确使用HTTP状态码、实现XML扩展性、满足合规性要求以及处理安全问题。