Updated by: 5689 | PROPOSED STANDARD |
Network Working Group | L. Dusseault, Ed. |
Request for Comments: 4918 | CommerceNet |
Obsoletes: 2518 | June 2007 |
Category: Standards Track |
HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)
- この記述の状態
- この文書はインターネットコミュニティにインターネット標準化過程プロトコルを詳述し改善のための議論と提案を要求します。このプロトコルの標準化状態と状況については "インターネット公式プロトコル標準 (STD 1)" の最新版を参照して下さい。この文章の配布は無制限です。
- 著作権告知
- Copyright © The IEFT Trust (2007)
- 概要
- Web Distributed Authoring and Versioning (WebDAV) はリソースのプロパティ管理と生成、リソースコレクション管理、URL名前空間操作およびリソースロック (競合回避) に対する HTTP/1.1 へ付属するメソッド、ヘッダおよび Content-Type で構成されている。RFC 2518 は 1999 年 2 月に発行され、この仕様は少しの修正と多くの互換運用性を加え RFC 2518 に置き換えるものである。
- 目次
1. 序論 ....................................................7 2. Notational Conventions ..........................................8 3. Terminology .....................................................8 4. Data Model for Resource Properties .............................10 4.1. The Resource Property Model ...............................10 4.2. Properties and HTTP Headers ...............................10 4.3. Property Values ...........................................10 4.3.1. Example - Property with Mixed Content ..............12 4.4. Property Names ............................................14 4.5. Source Resources and Output Resources .....................14 5. Collections of Web Resources ...................................14 5.1. HTTP URL Namespace Model ..................................15 5.2. Collection Resources ......................................15 6. Locking ........................................................17 6.1. Lock Model ................................................18 6.2. Exclusive vs. Shared Locks ................................19 6.3. Required Support ..........................................20 6.4. Lock Creator and Privileges ...............................20 6.5. Lock Tokens ...............................................21 6.6. Lock Timeout ..............................................21 6.7. Lock Capability Discovery .................................22 6.8. Active Lock Discovery .....................................22 7. Write Lock .....................................................23 7.1. Write Locks and Properties ................................24 7.2. Avoiding Lost Updates .....................................24 7.3. Write Locks and Unmapped URLs .............................25 7.4. Write Locks and Collections ...............................26 7.5. Write Locks and the If Request Header .....................28 7.5.1. Example - Write Lock and COPY ......................28 7.5.2. Example - Deleting a Member of a Locked Collection .........................................29 7.6. Write Locks and COPY/MOVE .................................30 7.7. Refreshing Write Locks ....................................30 8. General Request and Response Handling ..........................31 8.1. Precedence in Error Handling ..............................31 8.2. Use of XML ................................................31 8.3. URL Handling ..............................................32 8.3.1. Example - Correct URL Handling .....................32 8.4. Required Bodies in Requests ...............................33 8.5. HTTP Headers for Use in WebDAV ............................33 8.6. ETag ......................................................33 8.7. Including Error Response Bodies ...........................34 8.8. Impact of Namespace Operations on Cache Validators ........34 9. HTTP Methods for Distributed Authoring .........................35 9.1. PROPFIND Method ...........................................35 9.1.1. PROPFIND Status Codes ..............................37 9.1.2. Status Codes for Use in 'propstat' Element .........37 9.1.3. Example - Retrieving Named Properties ..............38 9.1.4. Example - Using 'propname' to Retrieve All Property Names .....................................39 9.1.5. Example - Using So-called 'allprop' ................41 9.1.6. Example - Using 'allprop' with 'include' ...........43 9.2. PROPPATCH Method ..........................................44 9.2.1. Status Codes for Use in 'propstat' Element .........44 9.2.2. Example - PROPPATCH ................................45 9.3. MKCOL Method ..............................................46 9.3.1. MKCOL Status Codes .................................47 9.3.2. Example - MKCOL ....................................47 9.4. GET, HEAD for Collections .................................48 9.5. POST for Collections ......................................48 9.6. DELETE Requirements .......................................48 9.6.1. DELETE for Collections .............................49 9.6.2. Example - DELETE ...................................49 9.7. PUT Requirements ..........................................50 9.7.1. PUT for Non-Collection Resources ...................50 9.7.2. PUT for Collections ................................51 9.8. COPY Method ...............................................51 9.8.1. COPY for Non-collection Resources ..................51 9.8.2. COPY for Properties ................................52 9.8.3. COPY for Collections ...............................52 9.8.4. COPY and Overwriting Destination Resources .........53 9.8.5. Status Codes .......................................54 9.8.6. Example - COPY with Overwrite ......................55 9.8.7. Example - COPY with No Overwrite ...................55 9.8.8. Example - COPY of a Collection .....................56 9.9. MOVE Method ...............................................56 9.9.1. MOVE for Properties ................................57 9.9.2. MOVE for Collections ...............................57 9.9.3. MOVE and the Overwrite Header ......................58 9.9.4. Status Codes .......................................59 9.9.5. Example - MOVE of a Non-Collection .................60 9.9.6. Example - MOVE of a Collection .....................60 9.10. LOCK Method ..............................................61 9.10.1. Creating a Lock on an Existing Resource ...........61 9.10.2. Refreshing Locks ..................................62 9.10.3. Depth and Locking .................................62 9.10.4. Locking Unmapped URLs .............................63 9.10.5. Lock Compatibility Table ..........................63 9.10.6. LOCK Responses ....................................63 9.10.7. Example - Simple Lock Request .....................64 9.10.8. Example - Refreshing a Write Lock .................65 9.10.9. Example - Multi-Resource Lock Request .............66 9.11. UNLOCK Method ............................................68 9.11.1. Status Codes ......................................68 9.11.2. Example - UNLOCK ..................................69 10. HTTP Headers for Distributed Authoring ........................69 10.1. DAV Header ...............................................69 10.2. Depth Header .............................................70 10.3. Destination Header .......................................71 10.4. If Header ................................................72 10.4.1. Purpose ...........................................72 10.4.2. Syntax ............................................72 10.4.3. List Evaluation ...................................73 10.4.4. Matching State Tokens and ETags ...................74 10.4.5. If Header and Non-DAV-Aware Proxies ...............74 10.4.6. Example - No-tag Production .......................75 10.4.7. Example - Using "Not" with No-tag Production ......75 10.4.8. Example - Causing a Condition to Always Evaluate to True ..................................75 10.4.9. Example - Tagged List If Header in COPY ...........76 10.4.10. Example - Matching Lock Tokens with Collection Locks .................................76 10.4.11. Example - Matching ETags on Unmapped URLs ........76 10.5. Lock-Token Header ........................................77 10.6. Overwrite Header .........................................77 10.7. Timeout Request Header ...................................78 11. Status Code Extensions to HTTP/1.1 ............................78 11.1. 207 Multi-Status .........................................78 11.2. 422 Unprocessable Entity .................................78 11.3. 423 Locked ...............................................78 11.4. 424 Failed Dependency ....................................79 11.5. 507 Insufficient Storage .................................79 12. Use of HTTP Status Codes ......................................79 12.1. 412 Precondition Failed ..................................79 12.2. 414 Request-URI Too Long .................................79 13. Multi-Status Response .........................................80 13.1. Response Headers .........................................80 13.2. Handling Redirected Child Resources ......................81 13.3. Internal Status Codes ....................................81 14. XML Element Definitions .......................................81 14.1. activelock XML Element ...................................81 14.2. allprop XML Element ......................................82 14.3. collection XML Element ...................................82 14.4. depth XML Element ........................................82 14.5. error XML Element ........................................82 14.6. exclusive XML Element ....................................83 14.7. href XML Element .........................................83 14.8. include XML Element ......................................83 14.9. location XML Element .....................................83 14.10. lockentry XML Element ...................................84 14.11. lockinfo XML Element ....................................84 14.12. lockroot XML Element ....................................84 14.13. lockscope XML Element ...................................84 14.14. locktoken XML Element ...................................85 14.15. locktype XML Element ....................................85 14.16. multistatus XML Element .................................85 14.17. owner XML Element .......................................85 14.18. prop XML Element ........................................86 14.19. propertyupdate XML Element ..............................86 14.20. propfind XML Element ....................................86 14.21. propname XML Element ....................................87 14.22. propstat XML Element ....................................87 14.23. remove XML Element ......................................87 14.24. response XML Element ....................................88 14.25. responsedescription XML Element .........................88 14.26. set XML Element .........................................88 14.27. shared XML Element ......................................89 14.28. status XML Element ......................................89 14.29. timeout XML Element .....................................89 14.30. write XML Element .......................................89 15. DAV Properties ................................................90 16. Precondition/Postcondition XML Elements .......................98 17. XML Extensibility in DAV .....................................101 18. DAV Compliance Classes .......................................103 18.1. Class 1 .................................................103 18.2. Class 2 .................................................103 18.3. Class 3 .................................................103 19. Internationalization Considerations ..........................104 20. Security Considerations ......................................105 20.1. Authentication of Clients ...............................105 20.2. Denial of Service .......................................106 20.3. Security through Obscurity ..............................106 20.4. Privacy Issues Connected to Locks .......................106 20.5. Privacy Issues Connected to Properties ..................107 20.6. Implications of XML Entities ............................107 20.7. Risks Connected with Lock Tokens ........................108 20.8. Hosting Malicious Content ...............................108 21. IANA Considerations ..........................................109 21.1. New URI Schemes .........................................109 21.2. XML Namespaces ..........................................109 21.3. Message Header Fields ...................................109 21.3.1. DAV ..............................................109 21.3.2. Depth ............................................110 21.3.3. Destination ......................................110 21.3.4. If ...............................................110 21.3.5. Lock-Token .......................................110 21.3.6. Overwrite ........................................111 21.3.7. Timeout ..........................................111 21.4. HTTP Status Codes .......................................111 22. Acknowledgements .............................................112 23. Contributors to This Specification ...........................113 24. Authors of RFC 2518 ..........................................113 25. References ...................................................114 25.1. Normative References.....................................114 25.2. Informative References ..................................115 Appendix A. Notes on Processing XML Elements ....................117 A.1. Notes on Empty XML Elements ..............................117 A.2. Notes on Illegal XML Processing ..........................117 A.3. Example - XML Syntax Error ...............................117 A.4. Example - Unexpected XML Element .........................118 Appendix B. Notes on HTTP Client Compatibility ...................119 Appendix C. The 'opaquelocktoken' Scheme and URIs ................120 Appendix D. Lock-null Resources ..................................120 D.1. Guidance for Clients Using LOCK to Create Resources ......121 Appendix E. Guidance for Clients Desiring to Authenticate ........121 Appendix F. Summary of Changes from RFC 2518 .....................123 F.1. Changes for Both Client and Server Implementations .......123 F.2. Changes for Server Implementations .......................125 F.3. Other Changes ............................................126
1. 序論
この文書はクライアントがリモート Web コンテンツの編集操作を行うための HTTP/1.1 プロトコルに対する拡張を詳述する。この拡張は以下に記述するメソッド、ヘッダ、リクエストエンティティボディフォーマット、レスポンスエンティティボディフォーマットのセットを提供する:
- Properties:
- Web ページの著者や作成日時など、内容に対する作成、削除、情報要求の能力。
- Collections:
- 文書セットの生成と (ファイルシステムでのディレクトリ一覧に似た) 階層的なメンバーシップ一覧を取得する能力。
- Locking:
- 複数の人間が同時に文書への作業に取りかかる事を防ぐ能力。これは、最初の著者が別の著者の変更内容をマージせずに修正する "lost update problem" を防止する。
- Namespace Operations:
- Web リソースに対するコピーや移動を行うための、URL からリソースへのマッピングを変更する操作をサーバに指示する能力。
これらの操作に関する要求や原理は関連文書 "Requirements for a Distributed Authoring and Versioning Protocol for the World Wide Web" [RFC2291] で説明する。
この文書は [RFC 2291] で提案されているようなバージョン操作を説明していない。この作業は別の文書 "Versioning Extensions to WebDAV" [FVC3253] で行われている。
以下の章では様々な WebDAV 抽象化への詳細な序論を提供する: リソースプロパティ (4章), リソースコレクション (5章), 一般ロック (6章) および明確な書き込みロック (7章)。
これらの抽象化は WebDAV 仕様の HTTP メソッド (9章) と、それらの WebDAV メソッドと共に用いられる追加の HTTP ヘッダ (10章) によって操作される。
HTTP/1.1 で定義されているステータスコードは WebDAV メソッドで遭遇するエラー状況のほとんどを詳述するのに十分だが、既存のカテゴリにはうまく入らない幾つかのエラーが存在する。この仕様では WebDAV メソッドのために開発された追加のステータスコードを定義し (11章)、WebDAV で使用される既存の HTTP ステータスコードについて詳述する (12章)。いくつかの WebDAV メソッドは多くのリソースに対して動作できるため、複数のリソースに対するステータス情報を返すためにマルチステータスレスポンスが導入されている (13章)。最後に WebDAV のこのバージョンはエラーレスポンスボディ内の前提条件と後条件 (16章) XML 要素を導入する。
WebDAV はプロパティ名と幾つかの値で XML ([REC-XML]) を使用しており、また複雑なリクエストとレスポンスを整理するためにも XML を使用している。この仕様は DTD と全プロパティのテキスト定義 (15章)、それに整理に使用される他の全ての XML 要素 (14章) を含んでいる。WebDAV は後方互換 (17章) を確保するための WebDAV XML 整理拡張の特別ルールを含んでいる。
仕上げの仕様は、リソースに対するこの仕様への互換性 (18章)、国際化のサポート (19章)、セキュリティ (20章) を意味するセクションである。
慣例表記
このドキュメントは HTTP/1.1 プロトコルに対して 1 セットの拡張を詳述していることから、プロトコル要素を説明するのに使用する拡張 BNF は連続空白に関する扱いも含めて正に [RFC2616] の 2.1 章で説明しているものと同じである。この拡張 BNF が [RFC2616] の 2.2 章で提供されている基本的なプロダクションルールを使用している事から、これらのルールはこの文書によく適合している。これは他の RFC で使用されている標準的な BNF 構文ではない事に注意。
この文書における MUST (なければならない), MUST NOT (あってはいけない), REQUIRED (必須), SHALL (することになる), SHALL NOT (しないだろう), SHOULD (すべき), SHOLUD NOT (すべきでない), RECOMMENDED (推奨), MAY (できる) OPTIONAL (選択的) は [RFC2119] で詳述しているように解釈される。
自然言語的に、"DAV:" XML 名前空間における "creationdate" プロパティのようなプロパティは、簡潔のためしばしば "DAV:creationdate" で参照されることに注意。
用語
- URI/URL
- Uniform Resource Identifier と Uniform Resource Locator を表す。これらの用語 (とそれらの違い) は [RFC3986] で定義されている。
- URI/URLマッピング
- 絶対URIとリソースとの関係。リソースがネットワーク取得不可能な複数項目であるかのうせいがあるため