| draft-ietf-webdav-rfc2518bis-08.txt | | draft-ietf-webdav-rfc2518bis-09.txt | |
| | | | |
| WebDAV L. Dusseault | | WebDAV L. Dusseault | |
| Internet-Draft OSAF | | Internet-Draft OSAF | |
|
| Expires: May 19, 2006 November 15, 2005 | | Obsoletes: 2518 (if approved) November 2005 | |
| | | Expires: May 5, 2006 | |
| | | | |
|
| HTTP Extensions for Distributed Authoring - WebDAV RFC2518 bis | | HTTP Extensions for Distributed Authoring - WebDAV | |
| draft-ietf-webdav-rfc2518bis-08 | | draft-ietf-webdav-rfc2518bis-09 | |
| | | | |
| Status of this Memo | | Status of this Memo | |
| | | | |
| By submitting this Internet-Draft, each author represents that any | | By submitting this Internet-Draft, each author represents that any | |
| applicable patent or other IPR claims of which he or she is aware | | applicable patent or other IPR claims of which he or she is aware | |
| have been or will be disclosed, and any of which he or she becomes | | have been or will be disclosed, and any of which he or she becomes | |
| aware will be disclosed, in accordance with Section 6 of BCP 79. | | aware will be disclosed, in accordance with Section 6 of BCP 79. | |
| | | | |
| Internet-Drafts are working documents of the Internet Engineering | | Internet-Drafts are working documents of the Internet Engineering | |
| Task Force (IETF), its areas, and its working groups. Note that | | Task Force (IETF), its areas, and its working groups. Note that | |
| | | | |
| skipping to change at page 1, line 33 | | skipping to change at page 1, line 34 | |
| and may be updated, replaced, or obsoleted by other documents at any | | and may be updated, replaced, or obsoleted by other documents at any | |
| time. It is inappropriate to use Internet-Drafts as reference | | time. It is inappropriate to use Internet-Drafts as reference | |
| material or to cite them other than as "work in progress." | | material or to cite them other than as "work in progress." | |
| | | | |
| The list of current Internet-Drafts can be accessed at | | The list of current Internet-Drafts can be accessed at | |
| http://www.ietf.org/ietf/1id-abstracts.txt. | | http://www.ietf.org/ietf/1id-abstracts.txt. | |
| | | | |
| The list of Internet-Draft Shadow Directories can be accessed at | | The list of Internet-Draft Shadow Directories can be accessed at | |
| http://www.ietf.org/shadow.html. | | http://www.ietf.org/shadow.html. | |
| | | | |
|
| This Internet-Draft will expire on May 19, 2006. | | This Internet-Draft will expire on May 5, 2006. | |
| | | | |
| Copyright Notice | | Copyright Notice | |
| | | | |
| Copyright (C) The Internet Society (2005). | | Copyright (C) The Internet Society (2005). | |
| | | | |
| Abstract | | Abstract | |
| | | | |
| WebDAV consists of a set of methods, headers, and content-types | | WebDAV consists of a set of methods, headers, and content-types | |
| ancillary to HTTP/1.1 for the management of resource properties, | | ancillary to HTTP/1.1 for the management of resource properties, | |
|
| creation and management of resource collections, namespace | | creation and management of resource collections, URL namespace | |
| manipulation, and resource locking (collision avoidance). | | manipulation, and resource locking (collision avoidance). | |
| | | | |
|
| RFC2518 was published in February 1998, and this draft makes minor | | RFC2518 was published in February 1999, and this specification makes | |
| revisions mostly due to interoperability experience. | | minor revisions mostly due to interoperability experience. | |
| | | | |
| Table of Contents | | Table of Contents | |
| | | | |
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 7 | | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 7 | |
| 2. Notational Conventions . . . . . . . . . . . . . . . . . . . 9 | | 2. Notational Conventions . . . . . . . . . . . . . . . . . . . 9 | |
| 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 10 | | 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |
| 4. Data Model for Resource Properties . . . . . . . . . . . . . 11 | | 4. Data Model for Resource Properties . . . . . . . . . . . . . 11 | |
| 4.1. The Resource Property Model . . . . . . . . . . . . . . 11 | | 4.1. The Resource Property Model . . . . . . . . . . . . . . 11 | |
| 4.2. Properties and HTTP Headers . . . . . . . . . . . . . . 11 | | 4.2. Properties and HTTP Headers . . . . . . . . . . . . . . 11 | |
| 4.3. XML Usage . . . . . . . . . . . . . . . . . . . . . . . 11 | | 4.3. XML Usage . . . . . . . . . . . . . . . . . . . . . . . 11 | |
| 4.4. Property Values . . . . . . . . . . . . . . . . . . . . 12 | | 4.4. Property Values . . . . . . . . . . . . . . . . . . . . 12 | |
|
| 4.5. Property Names . . . . . . . . . . . . . . . . . . . . . 13 | | 4.4.1. Example - Property with Mixed Content . . . . . . . 14 | |
| 4.6. Source Resources and Output Resources . . . . . . . . . 13 | | 4.5. Property Names . . . . . . . . . . . . . . . . . . . . . 15 | |
| 5. Collections of Web Resources . . . . . . . . . . . . . . . . 15 | | 4.6. Source Resources and Output Resources . . . . . . . . . 16 | |
| 5.1. HTTP URL Namespace Model . . . . . . . . . . . . . . . . 15 | | 5. Collections of Web Resources . . . . . . . . . . . . . . . . 17 | |
| 5.2. Collection Resources . . . . . . . . . . . . . . . . . . 15 | | 5.1. HTTP URL Namespace Model . . . . . . . . . . . . . . . . 17 | |
| 6. Locking . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 | | 5.2. Collection Resources . . . . . . . . . . . . . . . . . . 17 | |
| 6.1. Exclusive Vs. Shared Locks . . . . . . . . . . . . . . . 17 | | 6. Locking . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 | |
| 6.2. Required Support . . . . . . . . . . . . . . . . . . . . 18 | | 6.1. Exclusive Vs. Shared Locks . . . . . . . . . . . . . . . 19 | |
| 6.3. Lock Tokens . . . . . . . . . . . . . . . . . . . . . . 18 | | 6.2. Required Support . . . . . . . . . . . . . . . . . . . . 20 | |
| 6.4. Lock Capability Discovery . . . . . . . . . . . . . . . 19 | | 6.3. Lock Tokens . . . . . . . . . . . . . . . . . . . . . . 20 | |
| 6.5. Active Lock Discovery . . . . . . . . . . . . . . . . . 19 | | 6.4. Lock Capability Discovery . . . . . . . . . . . . . . . 21 | |
| 6.6. Locks and Multiple Bindings . . . . . . . . . . . . . . 19 | | 6.5. Active Lock Discovery . . . . . . . . . . . . . . . . . 21 | |
| 7. Write Lock . . . . . . . . . . . . . . . . . . . . . . . . . 21 | | 6.6. Locks and Multiple Bindings . . . . . . . . . . . . . . 22 | |
| 7.1. Lock Owner . . . . . . . . . . . . . . . . . . . . . . . 21 | | 7. Write Lock . . . . . . . . . . . . . . . . . . . . . . . . . 23 | |
| 7.2. Methods Restricted by Write Locks . . . . . . . . . . . 21 | | 7.1. Lock Owner . . . . . . . . . . . . . . . . . . . . . . . 23 | |
| 7.3. Write Locks and Lock Tokens . . . . . . . . . . . . . . 22 | | 7.2. Methods Restricted by Write Locks . . . . . . . . . . . 23 | |
| 7.4. Write Locks and Properties . . . . . . . . . . . . . . . 22 | | 7.3. Write Locks and Lock Tokens . . . . . . . . . . . . . . 24 | |
| 7.5. Avoiding Lost Updates . . . . . . . . . . . . . . . . . 22 | | 7.4. Write Locks and Properties . . . . . . . . . . . . . . . 24 | |
| 7.6. Write Locks and Unmapped URLs . . . . . . . . . . . . . 23 | | 7.5. Avoiding Lost Updates . . . . . . . . . . . . . . . . . 24 | |
| 7.7. Write Locks and Collections . . . . . . . . . . . . . . 25 | | 7.6. Write Locks and Unmapped URLs . . . . . . . . . . . . . 25 | |
| 7.8. Write Locks and the If Request Header . . . . . . . . . 26 | | 7.7. Write Locks and Collections . . . . . . . . . . . . . . 27 | |
| 7.9. Write Locks and COPY/MOVE . . . . . . . . . . . . . . . 27 | | 7.8. Write Locks and the If Request Header . . . . . . . . . 28 | |
| 7.10. Refreshing Write Locks . . . . . . . . . . . . . . . . . 28 | | 7.8.1. Example - Write Lock . . . . . . . . . . . . . . . . 29 | |
| 8. HTTP Methods for Distributed Authoring . . . . . . . . . . . 29 | | 7.9. Write Locks and COPY/MOVE . . . . . . . . . . . . . . . 29 | |
| 8.1. General request and response handling . . . . . . . . . 29 | | 7.10. Refreshing Write Locks . . . . . . . . . . . . . . . . . 30 | |
| 8.1.1. Use of XML . . . . . . . . . . . . . . . . . . . . . 29 | | 8. HTTP Methods for Distributed Authoring . . . . . . . . . . . 31 | |
| 8.1.2. Required Bodies in Requests . . . . . . . . . . . . 29 | | 8.1. General Request and Response Handling . . . . . . . . . 31 | |
| 8.1.3. HTTP Headers for use in WebDAV . . . . . . . . . . . 29 | | 8.1.1. Use of XML . . . . . . . . . . . . . . . . . . . . . 31 | |
| 8.1.4. ETag . . . . . . . . . . . . . . . . . . . . . . . . 29 | | 8.1.2. Required Bodies in Requests . . . . . . . . . . . . 31 | |
| 8.1.5. Including error response bodies . . . . . . . . . . 30 | | 8.1.3. HTTP Headers for use in WebDAV . . . . . . . . . . . 31 | |
| 8.2. PROPFIND . . . . . . . . . . . . . . . . . . . . . . . . 31 | | 8.1.4. ETag . . . . . . . . . . . . . . . . . . . . . . . . 31 | |
| 8.2.1. PROPFIND status codes . . . . . . . . . . . . . . . 32 | | 8.1.5. Including error response bodies . . . . . . . . . . 32 | |
| 8.2.2. Status codes for use with 207 (Multi-Status) . . . . 33 | | 8.2. PROPFIND . . . . . . . . . . . . . . . . . . . . . . . . 33 | |
| 8.2.3. Example - Retrieving Named Properties . . . . . . . 33 | | 8.2.1. PROPFIND status codes . . . . . . . . . . . . . . . 35 | |
| 8.2.4. Example - Retrieving Named and Dead Properties . . . 34 | | 8.2.2. Status codes for use with 207 (Multi-Status) . . . . 35 | |
| 8.2.5. Example - Using propname to Retrieve all Property | | 8.2.3. Example - Retrieving Named Properties . . . . . . . 35 | |
| Names . . . . . . . . . . . . . . . . . . . . . . . 35 | | 8.2.4. Example - Retrieving Named and Dead Properties . . . 37 | |
| 8.3. PROPPATCH . . . . . . . . . . . . . . . . . . . . . . . 36 | | 8.2.5. Example - Using 'propname' to Retrieve all | |
| 8.3.1. Status Codes for use with 207 (Multi-Status) . . . . 37 | | Property Names . . . . . . . . . . . . . . . . . . . 37 | |
| 8.3.2. Example - PROPPATCH . . . . . . . . . . . . . . . . 38 | | 8.2.6. Example - Using 'allprop' . . . . . . . . . . . . . 39 | |
| 8.4. MKCOL Method . . . . . . . . . . . . . . . . . . . . . . 39 | | 8.3. PROPPATCH . . . . . . . . . . . . . . . . . . . . . . . 41 | |
| 8.4.1. MKCOL Status Codes . . . . . . . . . . . . . . . . . 39 | | 8.3.1. Status Codes for use in 207 (Multi-Status) . . . . . 42 | |
| 8.4.2. Example - MKCOL . . . . . . . . . . . . . . . . . . 40 | | 8.3.2. Example - PROPPATCH . . . . . . . . . . . . . . . . 43 | |
| 8.5. GET, HEAD for Collections . . . . . . . . . . . . . . . 40 | | 8.4. MKCOL Method . . . . . . . . . . . . . . . . . . . . . . 44 | |
| 8.6. POST for Collections . . . . . . . . . . . . . . . . . . 41 | | 8.4.1. MKCOL Status Codes . . . . . . . . . . . . . . . . . 45 | |
| 8.7. DELETE . . . . . . . . . . . . . . . . . . . . . . . . . 41 | | 8.4.2. Example - MKCOL . . . . . . . . . . . . . . . . . . 45 | |
| 8.7.1. DELETE for Non-Collection Resources . . . . . . . . 41 | | 8.5. GET, HEAD for Collections . . . . . . . . . . . . . . . 46 | |
| 8.7.2. DELETE for Collections . . . . . . . . . . . . . . . 41 | | 8.6. POST for Collections . . . . . . . . . . . . . . . . . . 46 | |
| 8.7.3. Example - DELETE . . . . . . . . . . . . . . . . . . 42 | | 8.7. DELETE . . . . . . . . . . . . . . . . . . . . . . . . . 46 | |
| 8.8. PUT . . . . . . . . . . . . . . . . . . . . . . . . . . 42 | | 8.7.1. DELETE for Collections . . . . . . . . . . . . . . . 47 | |
| 8.8.1. PUT for Non-Collection Resources . . . . . . . . . . 42 | | 8.7.2. Example - DELETE . . . . . . . . . . . . . . . . . . 47 | |
| 8.8.2. PUT for Collections . . . . . . . . . . . . . . . . 43 | | 8.8. PUT . . . . . . . . . . . . . . . . . . . . . . . . . . 48 | |
| 8.9. COPY . . . . . . . . . . . . . . . . . . . . . . . . . . 43 | | 8.8.1. PUT for Non-Collection Resources . . . . . . . . . . 48 | |
| 8.9.1. COPY for Non-collection Resources . . . . . . . . . 43 | | 8.8.2. PUT for Collections . . . . . . . . . . . . . . . . 48 | |
| 8.9.2. COPY for Properties . . . . . . . . . . . . . . . . 44 | | 8.9. COPY . . . . . . . . . . . . . . . . . . . . . . . . . . 49 | |
| 8.9.3. COPY for Collections . . . . . . . . . . . . . . . . 44 | | 8.9.1. COPY for Non-collection Resources . . . . . . . . . 49 | |
| 8.9.4. COPY and the Overwrite Header . . . . . . . . . . . 45 | | 8.9.2. COPY for Properties . . . . . . . . . . . . . . . . 49 | |
| 8.9.5. Status Codes . . . . . . . . . . . . . . . . . . . . 46 | | 8.9.3. COPY for Collections . . . . . . . . . . . . . . . . 50 | |
| 8.9.6. COPY Examples . . . . . . . . . . . . . . . . . . . 46 | | 8.9.4. COPY and Overwriting Destination Resources . . . . . 51 | |
| 8.10. MOVE . . . . . . . . . . . . . . . . . . . . . . . . . . 48 | | 8.9.5. Status Codes . . . . . . . . . . . . . . . . . . . . 51 | |
| 8.10.1. MOVE for Properties . . . . . . . . . . . . . . . . 49 | | 8.9.6. Example - COPY with Overwrite . . . . . . . . . . . 52 | |
| 8.10.2. MOVE for Collections . . . . . . . . . . . . . . . . 49 | | 8.9.7. Example - COPY with No Overwrite . . . . . . . . . . 53 | |
| 8.10.3. MOVE and the Overwrite Header . . . . . . . . . . . 50 | | 8.9.8. Example - COPY of a Collection . . . . . . . . . . . 53 | |
| 8.10.4. Status Codes . . . . . . . . . . . . . . . . . . . . 50 | | 8.10. MOVE . . . . . . . . . . . . . . . . . . . . . . . . . . 54 | |
| 8.10.5. Examples . . . . . . . . . . . . . . . . . . . . . . 51 | | 8.10.1. MOVE for Properties . . . . . . . . . . . . . . . . 55 | |
| 8.11. LOCK Method . . . . . . . . . . . . . . . . . . . . . . 52 | | 8.10.2. MOVE for Collections . . . . . . . . . . . . . . . . 55 | |
| 8.11.1. Refreshing Locks . . . . . . . . . . . . . . . . . . 53 | | 8.10.3. MOVE and the Overwrite Header . . . . . . . . . . . 56 | |
| 8.11.2. Depth and Locking . . . . . . . . . . . . . . . . . 54 | | 8.10.4. Status Codes . . . . . . . . . . . . . . . . . . . . 56 | |
| 8.11.3. Locking Unmapped URLs . . . . . . . . . . . . . . . 54 | | 8.10.5. Example - MOVE of a Non-Collection . . . . . . . . . 57 | |
| 8.11.4. Lock Compatibility Table . . . . . . . . . . . . . . 54 | | 8.10.6. Example - MOVE of a Collection . . . . . . . . . . . 58 | |
| 8.11.5. LOCK responses . . . . . . . . . . . . . . . . . . . 55 | | 8.11. LOCK Method . . . . . . . . . . . . . . . . . . . . . . 58 | |
| 8.11.6. Example - Simple Lock Request . . . . . . . . . . . 55 | | 8.11.1. Refreshing Locks . . . . . . . . . . . . . . . . . . 59 | |
| 8.11.7. Example - Refreshing a Write Lock . . . . . . . . . 58 | | 8.11.2. Depth and Locking . . . . . . . . . . . . . . . . . 60 | |
| 8.11.8. Example - Multi-Resource Lock Request . . . . . . . 59 | | 8.11.3. Locking Unmapped URLs . . . . . . . . . . . . . . . 60 | |
| 8.12. UNLOCK Method . . . . . . . . . . . . . . . . . . . . . 60 | | 8.11.4. Lock Compatibility Table . . . . . . . . . . . . . . 60 | |
| 8.12.1. Status Codes . . . . . . . . . . . . . . . . . . . . 60 | | 8.11.5. LOCK Responses . . . . . . . . . . . . . . . . . . . 61 | |
| 8.12.2. Example . . . . . . . . . . . . . . . . . . . . . . 61 | | 8.11.6. Example - Simple Lock Request . . . . . . . . . . . 62 | |
| 9. HTTP Headers for Distributed Authoring . . . . . . . . . . . 62 | | 8.11.7. Example - Refreshing a Write Lock . . . . . . . . . 64 | |
| 9.1. DAV Header . . . . . . . . . . . . . . . . . . . . . . . 62 | | 8.11.8. Example - Multi-Resource Lock Request . . . . . . . 65 | |
| 9.2. Depth Header . . . . . . . . . . . . . . . . . . . . . . 62 | | 8.12. UNLOCK Method . . . . . . . . . . . . . . . . . . . . . 66 | |
| 9.3. Destination Header . . . . . . . . . . . . . . . . . . . 64 | | 8.12.1. Status Codes . . . . . . . . . . . . . . . . . . . . 66 | |
| 9.4. Force-Authentication Header . . . . . . . . . . . . . . 64 | | 8.12.2. Example - UNLOCK . . . . . . . . . . . . . . . . . . 67 | |
| 9.5. If Header . . . . . . . . . . . . . . . . . . . . . . . 64 | | 9. HTTP Headers for Distributed Authoring . . . . . . . . . . . 68 | |
| 9.5.1. No-tag-list Production . . . . . . . . . . . . . . . 65 | | 9.1. DAV Header . . . . . . . . . . . . . . . . . . . . . . . 68 | |
| 9.5.2. Tagged-list Production . . . . . . . . . . . . . . . 66 | | 9.2. Depth Header . . . . . . . . . . . . . . . . . . . . . . 68 | |
| 9.5.3. Not Production . . . . . . . . . . . . . . . . . . . 66 | | 9.3. Destination Header . . . . . . . . . . . . . . . . . . . 70 | |
| 9.5.4. Matching Function . . . . . . . . . . . . . . . . . 67 | | 9.4. Force-Authentication Header . . . . . . . . . . . . . . 70 | |
| 9.5.5. If Header and Non-DAV Aware Proxies . . . . . . . . 68 | | 9.5. If Header . . . . . . . . . . . . . . . . . . . . . . . 70 | |
| 9.6. Lock-Token Header . . . . . . . . . . . . . . . . . . . 68 | | 9.5.1. No-tag-list Production . . . . . . . . . . . . . . . 71 | |
| 9.7. Overwrite Header . . . . . . . . . . . . . . . . . . . . 68 | | 9.5.2. Tagged-list Production . . . . . . . . . . . . . . . 71 | |
| 9.8. Timeout Request Header . . . . . . . . . . . . . . . . . 69 | | 9.5.3. Example - Tagged List If header in COPY . . . . . . 72 | |
| 10. Status Code Extensions to HTTP/1.1 . . . . . . . . . . . . . 70 | | 9.5.4. Not Production . . . . . . . . . . . . . . . . . . . 72 | |
| 10.1. 102 Processing . . . . . . . . . . . . . . . . . . . . . 70 | | 9.5.5. Matching Function . . . . . . . . . . . . . . . . . 73 | |
| 10.2. 207 Multi-Status . . . . . . . . . . . . . . . . . . . . 70 | | 9.5.6. If Header and Non-DAV Aware Proxies . . . . . . . . 73 | |
| 10.3. 422 Unprocessable Entity . . . . . . . . . . . . . . . . 70 | | 9.6. Lock-Token Header . . . . . . . . . . . . . . . . . . . 74 | |
| 10.4. 423 Locked . . . . . . . . . . . . . . . . . . . . . . . 70 | | 9.7. Overwrite Header . . . . . . . . . . . . . . . . . . . . 74 | |
| 10.5. 424 Failed Dependency . . . . . . . . . . . . . . . . . 71 | | 9.8. Timeout Request Header . . . . . . . . . . . . . . . . . 74 | |
| 10.6. 507 Insufficient Storage . . . . . . . . . . . . . . . . 71 | | 10. Status Code Extensions to HTTP/1.1 . . . . . . . . . . . . . 76 | |
| 11. Use of HTTP Status Codes . . . . . . . . . . . . . . . . . . 72 | | 10.1. 207 Multi-Status . . . . . . . . . . . . . . . . . . . . 76 | |
| 11.1. 301 Moved Permanently . . . . . . . . . . . . . . . . . 72 | | 10.2. 422 Unprocessable Entity . . . . . . . . . . . . . . . . 76 | |
| 11.2. 302 Found . . . . . . . . . . . . . . . . . . . . . . . 72 | | 10.3. 423 Locked . . . . . . . . . . . . . . . . . . . . . . . 76 | |
| 11.3. 400 Bad Request . . . . . . . . . . . . . . . . . . . . 72 | | 10.4. 424 Failed Dependency . . . . . . . . . . . . . . . . . 76 | |
| 11.4. 403 Forbidden . . . . . . . . . . . . . . . . . . . . . 72 | | 10.5. 507 Insufficient Storage . . . . . . . . . . . . . . . . 76 | |
| 11.5. 409 Conflict . . . . . . . . . . . . . . . . . . . . . . 72 | | 11. Use of HTTP Status Codes . . . . . . . . . . . . . . . . . . 77 | |
| 11.6. 412 Precondition Failed . . . . . . . . . . . . . . . . 72 | | 11.1. 412 Precondition Failed . . . . . . . . . . . . . . . . 77 | |
| 11.7. 414 Request-URI Too Long . . . . . . . . . . . . . . . . 73 | | 11.2. 414 Request-URI Too Long . . . . . . . . . . . . . . . . 77 | |
| 11.8. 503 Service Unavailable . . . . . . . . . . . . . . . . 73 | | 12. Multi-Status Response . . . . . . . . . . . . . . . . . . . . 78 | |
| 12. Multi-Status Response . . . . . . . . . . . . . . . . . . . . 74 | | 12.1. Response headers . . . . . . . . . . . . . . . . . . . . 78 | |
| 12.1. Response headers . . . . . . . . . . . . . . . . . . . . 74 | | 12.2. URL Handling . . . . . . . . . . . . . . . . . . . . . . 78 | |
| 12.2. URL handling . . . . . . . . . . . . . . . . . . . . . . 74 | | 12.3. Handling redirected child resources . . . . . . . . . . 79 | |
| 12.3. Internal Status Codes . . . . . . . . . . . . . . . . . 75 | | 12.4. Internal Status Codes . . . . . . . . . . . . . . . . . 79 | |
| 13. XML Element Definitions . . . . . . . . . . . . . . . . . . . 76 | | 13. XML Element Definitions . . . . . . . . . . . . . . . . . . . 80 | |
| 13.1. activelock XML Element . . . . . . . . . . . . . . . . . 76 | | 13.1. activelock XML Element . . . . . . . . . . . . . . . . . 80 | |
| 13.2. depth XML Element . . . . . . . . . . . . . . . . . . . 76 | | 13.2. allprop XML Element . . . . . . . . . . . . . . . . . . 80 | |
| 13.3. locktoken XML Element . . . . . . . . . . . . . . . . . 76 | | 13.3. collection XML Element . . . . . . . . . . . . . . . . . 80 | |
| 13.4. lockroot XML Element . . . . . . . . . . . . . . . . . . 77 | | 13.4. dead-props XML Element . . . . . . . . . . . . . . . . . 81 | |
| 13.5. timeout XML Element . . . . . . . . . . . . . . . . . . 77 | | 13.5. depth XML Element . . . . . . . . . . . . . . . . . . . 81 | |
| 13.6. collection XML Element . . . . . . . . . . . . . . . . . 78 | | 13.6. error XML Element . . . . . . . . . . . . . . . . . . . 81 | |
| 13.7. href XML Element . . . . . . . . . . . . . . . . . . . . 78 | | 13.7. exclusive XML Element . . . . . . . . . . . . . . . . . 82 | |
| 13.8. lockentry XML Element . . . . . . . . . . . . . . . . . 78 | | 13.8. href XML Element . . . . . . . . . . . . . . . . . . . . 82 | |
| 13.9. lockinfo XML Element . . . . . . . . . . . . . . . . . . 79 | | 13.9. location XML Element . . . . . . . . . . . . . . . . . . 82 | |
| 13.10. lockscope XML Element . . . . . . . . . . . . . . . . . 79 | | 13.10. lockentry XML Element . . . . . . . . . . . . . . . . . 83 | |
| 13.11. exclusive XML Element . . . . . . . . . . . . . . . . . 79 | | 13.11. lockinfo XML Element . . . . . . . . . . . . . . . . . . 83 | |
| 13.12. shared XML Element . . . . . . . . . . . . . . . . . . . 80 | | 13.12. lockroot XML Element . . . . . . . . . . . . . . . . . . 83 | |
| 13.13. locktype XML Element . . . . . . . . . . . . . . . . . . 80 | | 13.13. lockscope XML Element . . . . . . . . . . . . . . . . . 84 | |
| 13.14. write XML Element . . . . . . . . . . . . . . . . . . . 80 | | 13.14. locktoken XML Element . . . . . . . . . . . . . . . . . 84 | |
| 13.15. multistatus XML Element . . . . . . . . . . . . . . . . 81 | | 13.15. locktype XML Element . . . . . . . . . . . . . . . . . . 84 | |
| 13.16. response XML Element . . . . . . . . . . . . . . . . . . 81 | | 13.16. multistatus XML Element . . . . . . . . . . . . . . . . 85 | |
| 13.17. propstat XML Element . . . . . . . . . . . . . . . . . . 82 | | 13.17. owner XML Element . . . . . . . . . . . . . . . . . . . 85 | |
| 13.18. status XML Element . . . . . . . . . . . . . . . . . . . 82 | | 13.18. prop XML element . . . . . . . . . . . . . . . . . . . . 85 | |
| 13.19. responsedescription XML Element . . . . . . . . . . . . 82 | | 13.19. propertyupdate XML element . . . . . . . . . . . . . . . 86 | |
| 13.20. owner XML Element . . . . . . . . . . . . . . . . . . . 83 | | 13.20. propfind XML Element . . . . . . . . . . . . . . . . . . 86 | |
| 13.21. prop XML element . . . . . . . . . . . . . . . . . . . . 83 | | 13.21. propname XML Element . . . . . . . . . . . . . . . . . . 86 | |
| 13.22. propertyupdate XML element . . . . . . . . . . . . . . . 84 | | 13.22. propstat XML Element . . . . . . . . . . . . . . . . . . 87 | |
| 13.23. remove XML element . . . . . . . . . . . . . . . . . . . 84 | | 13.23. remove XML element . . . . . . . . . . . . . . . . . . . 87 | |
| 13.24. set XML element . . . . . . . . . . . . . . . . . . . . 84 | | 13.24. response XML Element . . . . . . . . . . . . . . . . . . 87 | |
| 13.25. propfind XML Element . . . . . . . . . . . . . . . . . . 85 | | 13.25. responsedescription XML Element . . . . . . . . . . . . 88 | |
| 13.26. allprop XML Element . . . . . . . . . . . . . . . . . . 85 | | 13.26. set XML element . . . . . . . . . . . . . . . . . . . . 88 | |
| 13.27. propname XML Element . . . . . . . . . . . . . . . . . . 85 | | 13.27. shared XML Element . . . . . . . . . . . . . . . . . . . 89 | |
| 13.28. dead-props XML Element . . . . . . . . . . . . . . . . . 86 | | 13.28. status XML Element . . . . . . . . . . . . . . . . . . . 89 | |
| 13.29. error XML Element . . . . . . . . . . . . . . . . . . . 86 | | 13.29. timeout XML Element . . . . . . . . . . . . . . . . . . 89 | |
| 14. DAV Properties . . . . . . . . . . . . . . . . . . . . . . . 87 | | 13.30. write XML Element . . . . . . . . . . . . . . . . . . . 90 | |
| 14.1. creationdate Property . . . . . . . . . . . . . . . . . 87 | | 14. DAV Properties . . . . . . . . . . . . . . . . . . . . . . . 91 | |
| 14.2. displayname Property . . . . . . . . . . . . . . . . . . 88 | | 14.1. creationdate Property . . . . . . . . . . . . . . . . . 91 | |
| 14.3. getcontentlanguage Property . . . . . . . . . . . . . . 88 | | 14.2. displayname Property . . . . . . . . . . . . . . . . . . 92 | |
| 14.4. getcontentlength Property . . . . . . . . . . . . . . . 89 | | 14.3. getcontentlanguage Property . . . . . . . . . . . . . . 92 | |
| 14.5. getcontenttype Property . . . . . . . . . . . . . . . . 89 | | 14.4. getcontentlength Property . . . . . . . . . . . . . . . 93 | |
| 14.6. getetag Property . . . . . . . . . . . . . . . . . . . . 90 | | 14.5. getcontenttype Property . . . . . . . . . . . . . . . . 93 | |
| 14.7. getlastmodified Property . . . . . . . . . . . . . . . . 91 | | 14.6. getetag Property . . . . . . . . . . . . . . . . . . . . 94 | |
| 14.8. lockdiscovery Property . . . . . . . . . . . . . . . . . 91 | | 14.7. getlastmodified Property . . . . . . . . . . . . . . . . 94 | |
| 14.8.1. Example - Retrieving the lockdiscovery Property . . 92 | | 14.8. lockdiscovery Property . . . . . . . . . . . . . . . . . 95 | |
| 14.9. resourcetype Property . . . . . . . . . . . . . . . . . 94 | | 14.8.1. Example - Retrieving the lockdiscovery Property . . 96 | |
| 14.10. supportedlock Property . . . . . . . . . . . . . . . . . 94 | | 14.9. resourcetype Property . . . . . . . . . . . . . . . . . 97 | |
| 14.10.1. Example - Retrieving the supportedlock Property . . 96 | | 14.10. supportedlock Property . . . . . . . . . . . . . . . . . 98 | |
| 15. Precondition/postcondition XML elements . . . . . . . . . . . 97 | | 14.10.1. Example - Retrieving the DAV:supportedlock | |
| 16. Instructions for Processing XML in DAV . . . . . . . . . . . 100 | | Property . . . . . . . . . . . . . . . . . . . . . . 99 | |
| 17. DAV Compliance Classes . . . . . . . . . . . . . . . . . . . 101 | | 15. Precondition/postcondition XML elements . . . . . . . . . . . 100 | |
| 17.1. Class 1 . . . . . . . . . . . . . . . . . . . . . . . . 101 | | 16. Instructions for Processing XML in DAV . . . . . . . . . . . 103 | |
| 17.2. Class 2 . . . . . . . . . . . . . . . . . . . . . . . . 101 | | 17. DAV Compliance Classes . . . . . . . . . . . . . . . . . . . 104 | |
| 17.3. Class 'bis' . . . . . . . . . . . . . . . . . . . . . . 101 | | 17.1. Class 1 . . . . . . . . . . . . . . . . . . . . . . . . 104 | |
| 18. Internationalization Considerations . . . . . . . . . . . . . 103 | | 17.2. Class 2 . . . . . . . . . . . . . . . . . . . . . . . . 104 | |
| 19. Security Considerations . . . . . . . . . . . . . . . . . . . 105 | | 17.3. Class 'bis' . . . . . . . . . . . . . . . . . . . . . . 104 | |
| 19.1. Authentication of Clients . . . . . . . . . . . . . . . 105 | | 18. Internationalization Considerations . . . . . . . . . . . . . 106 | |
| 19.2. Denial of Service . . . . . . . . . . . . . . . . . . . 105 | | 19. Security Considerations . . . . . . . . . . . . . . . . . . . 108 | |
| 19.3. Security through Obscurity . . . . . . . . . . . . . . . 106 | | 19.1. Authentication of Clients . . . . . . . . . . . . . . . 108 | |
| 19.4. Privacy Issues Connected to Locks . . . . . . . . . . . 106 | | 19.2. Denial of Service . . . . . . . . . . . . . . . . . . . 108 | |
| 19.5. Privacy Issues Connected to Properties . . . . . . . . . 106 | | 19.3. Security through Obscurity . . . . . . . . . . . . . . . 109 | |
| 19.6. Implications of XML External Entities . . . . . . . . . 107 | | 19.4. Privacy Issues Connected to Locks . . . . . . . . . . . 109 | |
| 19.7. Risks Connected with Lock Tokens . . . . . . . . . . . . 107 | | 19.5. Privacy Issues Connected to Properties . . . . . . . . . 109 | |
| 19.8. Hosting malicious scripts executed on client machines . 108 | | 19.6. Implications of XML Entities . . . . . . . . . . . . . . 110 | |
| 20. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 109 | | 19.7. Risks Connected with Lock Tokens . . . . . . . . . . . . 111 | |
| 21. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 110 | | 19.8. Hosting malicious scripts executed on client machines . 111 | |
| 21.1. Previous Authors' Addresses . . . . . . . . . . . . . . 111 | | 20. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 113 | |
| 22. References . . . . . . . . . . . . . . . . . . . . . . . . . 112 | | 21. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 114 | |
| 22.1. Normative References . . . . . . . . . . . . . . . . . . 112 | | 21.1. Previous Authors' Addresses . . . . . . . . . . . . . . 115 | |
| 22.2. Informational References . . . . . . . . . . . . . . . . 112 | | 22. References . . . . . . . . . . . . . . . . . . . . . . . . . 116 | |
| Appendix A. Notes on Processing XML Elements . . . . . . . . . . 114 | | 22.1. Normative References . . . . . . . . . . . . . . . . . . 116 | |
| A.1. Notes on Empty XML Elements . . . . . . . . . . . . . . 114 | | 22.2. Informational References . . . . . . . . . . . . . . . . 116 | |
| A.2. Notes on Illegal XML Processing . . . . . . . . . . . . 114 | | Appendix A. Notes on Processing XML Elements . . . . . . . . . . 118 | |
| A.3. Example - XML Syntax Error . . . . . . . . . . . . . . . 114 | | A.1. Notes on Empty XML Elements . . . . . . . . . . . . . . 118 | |
| A.4. Example - Unknown XML Element . . . . . . . . . . . . . 115 | | A.2. Notes on Illegal XML Processing . . . . . . . . . . . . 118 | |
| Appendix B. Notes on HTTP Client Compatibility . . . . . . . . . 116 | | A.3. Example - XML Syntax Error . . . . . . . . . . . . . . . 118 | |
| Appendix C. The opaquelocktoken scheme and URIs . . . . . . . . 117 | | A.4. Example - Unknown XML Element . . . . . . . . . . . . . 119 | |
| Appendix D. Changes . . . . . . . . . . . . . . . . . . . . . . 118 | | Appendix B. Notes on HTTP Client Compatibility . . . . . . . . . 120 | |
| D.1. Summary of changes from RFC2518 . . . . . . . . . . . . 118 | | Appendix C. The opaquelocktoken scheme and URIs . . . . . . . . 121 | |
| D.1.1. Changes Notable to Server Implementors . . . . . . . 118 | | Appendix D. Summary of changes from RFC2518 . . . . . . . . . . 122 | |
| D.1.2. Changes Notable to Client Implementors . . . . . . . 119 | | D.1. Changes Notable to Server Implementors . . . . . . . . . 122 | |
| D.2. Changes from -05 to -06 . . . . . . . . . . . . . . . . 119 | | D.2. Changes Notable to Client Implementors . . . . . . . . . 123 | |
| D.3. Changes in -07 . . . . . . . . . . . . . . . . . . . . . 120 | | Appendix E. Change Log (to be removed by RFC Editor before | |
| D.4. Changes in -08 . . . . . . . . . . . . . . . . . . . . . 121 | | publication) . . . . . . . . . . . . . . . . . . . . 124 | |
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 122 | | E.1. Changes from -05 to -06 . . . . . . . . . . . . . . . . 124 | |
| Intellectual Property and Copyright Statements . . . . . . . . . 123 | | E.2. Changes in -07 . . . . . . . . . . . . . . . . . . . . . 124 | |
| | | E.3. Changes in -08 . . . . . . . . . . . . . . . . . . . . . 125 | |
| | | E.4. Changes in -09 . . . . . . . . . . . . . . . . . . . . . 126 | |
| | | Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 128 | |
| | | Intellectual Property and Copyright Statements . . . . . . . . . 129 | |
| | | | |
| 1. Introduction | | 1. Introduction | |
| | | | |
| This document describes an extension to the HTTP/1.1 protocol that | | This document describes an extension to the HTTP/1.1 protocol that | |
| allows clients to perform remote web content authoring operations. | | allows clients to perform remote web content authoring operations. | |
| This extension provides a coherent set of methods, headers, request | | This extension provides a coherent set of methods, headers, request | |
| entity body formats, and response entity body formats that provide | | entity body formats, and response entity body formats that provide | |
| operations for: | | operations for: | |
| | | | |
| Properties: The ability to create, remove, and query information | | Properties: The ability to create, remove, and query information | |
| | | | |
| skipping to change at page 7, line 27 | | skipping to change at page 7, line 27 | |
| Collections: The ability to create sets of documents and to retrieve | | Collections: The ability to create sets of documents and to retrieve | |
| a hierarchical membership listing (like a directory listing in a file | | a hierarchical membership listing (like a directory listing in a file | |
| system). | | system). | |
| | | | |
| Locking: The ability to keep more than one person from working on a | | Locking: The ability to keep more than one person from working on a | |
| document at the same time. This prevents the "lost update problem", | | document at the same time. This prevents the "lost update problem", | |
| in which modifications are lost as first one author then another | | in which modifications are lost as first one author then another | |
| writes changes without merging the other author's changes. | | writes changes without merging the other author's changes. | |
| | | | |
| Namespace Operations: The ability to instruct the server to copy and | | Namespace Operations: The ability to instruct the server to copy and | |
|
| move Web resources. | | move Web resources, operations which change the URL. | |
| | | | |
| Requirements and rationale for these operations are described in a | | Requirements and rationale for these operations are described in a | |
| companion document, "Requirements for a Distributed Authoring and | | companion document, "Requirements for a Distributed Authoring and | |
|
| Versioning Protocol for the World Wide Web" (RFC2291) [12]. | | Versioning Protocol for the World Wide Web" [RFC2291]. | |
| | | | |
| This standard does not specify the versioning operations suggested by | | This standard does not specify the versioning operations suggested by | |
|
| RFC2291 [12]. That work was done in a separate document, "Versioning | | [RFC2291]. That work was done in a separate document, "Versioning | |
| Extensions to WebDAV" (RFC3253) [14]. | | Extensions to WebDAV" [RFC3253]. | |
| | | | |
|
| The sections below provide a detailed introduction to resource | | The sections below provide a detailed introduction to various WebDAV | |
| properties (Section 4), collections of resources (Section 5), and | | abstractions: resource properties (Section 4), collections of | |
| locking operations (Section 6). These sections introduce the | | resources (Section 5), locks (Section 6) in general and write locks | |
| abstractions manipulated by the WebDAV-specific HTTP methods | | (Section 7) specifically. | |
| (Section 8) and the new HTTP headers used with WebDAV methods | | | |
| (Section 9). | | These abstractions are manipulated by the WebDAV-specific HTTP | |
| | | methods (Section 8) and the new HTTP headers (Section 9) used with | |
| | | WebDAV methods. | |
| | | | |
| While the status codes provided by HTTP/1.1 are sufficient to | | While the status codes provided by HTTP/1.1 are sufficient to | |
| describe most error conditions encountered by WebDAV methods, there | | describe most error conditions encountered by WebDAV methods, there | |
| are some errors that do not fall neatly into the existing categories. | | are some errors that do not fall neatly into the existing categories. | |
| This specification defines new status codes developed for WebDAV | | This specification defines new status codes developed for WebDAV | |
| methods (Section 10) and describes existing HTTP status codes | | methods (Section 10) and describes existing HTTP status codes | |
| (Section 11) as used in WebDAV. Since some WebDAV methods may | | (Section 11) as used in WebDAV. Since some WebDAV methods may | |
| operate over many resources, the Multi-Status response (Section 12) | | operate over many resources, the Multi-Status response (Section 12) | |
| has been introduced to return status information for multiple | | has been introduced to return status information for multiple | |
|
| resources. Finally, this version of WebDAV introduces XML elements | | resources. Finally, this version of WebDAV introduces precondition | |
| in error response bodies in Section 15. | | and postcondition (Section 15) XML elements in error response bodies. | |
| | | | |
|
| WebDAV uses XML [11] to marshal complicated request and response | | WebDAV uses [XML] for property names and some values, and also uses | |
| information, as well as to express metadata, so this specification | | XML to marshal complicated request and response. This specification | |
| contains definitions of all XML elements used (Section 13). WebDAV | | contains DTD and text definitions of all all properties (Section 14) | |
| | | and all other XML elements (Section 13) used in marshalling. WebDAV | |
| includes a few special rules on how to process XML (Section 16) | | includes a few special rules on how to process XML (Section 16) | |
| appearing in WebDAV so that it truly is extensible. | | appearing in WebDAV so that it truly is extensible. | |
| | | | |
| Finishing off the specification are sections on what it means for a | | Finishing off the specification are sections on what it means for a | |
| resource to be compliant with this specification (Section 17), on | | resource to be compliant with this specification (Section 17), on | |
| internationalization support (Section 18), and on security | | internationalization support (Section 18), and on security | |
| (Section 19). | | (Section 19). | |
| | | | |
| 2. Notational Conventions | | 2. Notational Conventions | |
| | | | |
| Since this document describes a set of extensions to the HTTP/1.1 | | Since this document describes a set of extensions to the HTTP/1.1 | |
| protocol, the augmented BNF used herein to describe protocol elements | | protocol, the augmented BNF used herein to describe protocol elements | |
|
| is exactly the same as described in section 2.1 of RFC2616 [6], | | is exactly the same as described in section 2.1 of [RFC2616], | |
| including the rules about implied linear white-space. Since this | | including the rules about implied linear white-space. Since this | |
| augmented BNF uses the basic production rules provided in section 2.2 | | augmented BNF uses the basic production rules provided in section 2.2 | |
|
| of RFC2616 [6], these rules apply to this document as well. | | of [RFC2616], these rules apply to this document as well. | |
| | | | |
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |
|
| document are to be interpreted as described in RFC2119 [2]. | | document are to be interpreted as described in [RFC2119]. | |
| | | | |
| Note that in natural language, a property like the "creationdate" | | Note that in natural language, a property like the "creationdate" | |
|
| property in the "DAV:" namespace is sometimes referred to as "DAV: | | property in the "DAV:" XML namespace is sometimes referred to as | |
| creationdate" for brevity. | | "DAV:creationdate" for brevity. | |
| | | | |
| 3. Terminology | | 3. Terminology | |
| | | | |
| URI/URL - A Uniform Resource Identifier and Uniform Resource Locator, | | URI/URL - A Uniform Resource Identifier and Uniform Resource Locator, | |
| respectively. These terms (and the distinction between them) are | | respectively. These terms (and the distinction between them) are | |
|
| defined in RFC3986 [8]. | | defined in [RFC3986]. | |
| | | | |
| | | URI/URL Mapping - A relation between an absolute URI and a resource. | |
| | | Since a resource can represent items that are not network | |
| | | retrievable, as well as those that are, it is possible for a resource | |
| | | to have zero, one, or many URI mappings. Mapping a resource to an | |
| | | "http" scheme URI makes it possible to submit HTTP protocol requests | |
| | | to the resource using the URI. | |
| | | | |
| Collection - A resource that contains a set of URLs, which identify | | Collection - A resource that contains a set of URLs, which identify | |
| and locate member resources and which meet the collections | | and locate member resources and which meet the collections | |
| requirements (Section 5). | | requirements (Section 5). | |
| | | | |
| Member URL - A URL which is a member of the set of URLs contained by | | Member URL - A URL which is a member of the set of URLs contained by | |
| a collection. | | a collection. | |
| | | | |
| Internal Member URL - A Member URL that is immediately relative to | | Internal Member URL - A Member URL that is immediately relative to | |
| the URL of the collection (the definition of immediately relative is | | the URL of the collection (the definition of immediately relative is | |
| given later (Section 5.2)). | | given later (Section 5.2)). | |
| | | | |
| Property - A name/value pair that contains descriptive information | | Property - A name/value pair that contains descriptive information | |
| about a resource. | | about a resource. | |
| | | | |
| Live Property - A property whose semantics and syntax are enforced by | | Live Property - A property whose semantics and syntax are enforced by | |
|
| the server. For example, the live "getcontentlength" property has | | the server. For example, the live property DAV:getcontentlength has | |
| its value, the length of the entity returned by a GET request, | | its value, the length of the entity returned by a GET request, | |
| automatically calculated by the server. | | automatically calculated by the server. | |
| | | | |
| Dead Property - A property whose semantics and syntax are not | | Dead Property - A property whose semantics and syntax are not | |
| enforced by the server. The server only records the value of a dead | | enforced by the server. The server only records the value of a dead | |
| property; the client is responsible for maintaining the consistency | | property; the client is responsible for maintaining the consistency | |
| of the syntax and semantics of a dead property. | | of the syntax and semantics of a dead property. | |
| | | | |
| Principal - A "principal" is a distinct human or computational actor | | Principal - A "principal" is a distinct human or computational actor | |
| that initiates access to network resources. | | that initiates access to network resources. | |
| | | | |
| skipping to change at page 11, line 46 | | skipping to change at page 11, line 46 | |
| large number of properties are needed to describe the state of a | | large number of properties are needed to describe the state of a | |
| resource, and setting/returning them all through HTTP headers is | | resource, and setting/returning them all through HTTP headers is | |
| inefficient. Thus a mechanism is needed which allows a principal to | | inefficient. Thus a mechanism is needed which allows a principal to | |
| identify a set of properties in which the principal is interested and | | identify a set of properties in which the principal is interested and | |
| to set or retrieve just those properties. | | to set or retrieve just those properties. | |
| | | | |
| 4.3. XML Usage | | 4.3. XML Usage | |
| | | | |
| In HTTP/1.1, method parameter information was exclusively encoded in | | In HTTP/1.1, method parameter information was exclusively encoded in | |
| HTTP headers. Unlike HTTP/1.1, WebDAV encodes method parameter | | HTTP headers. Unlike HTTP/1.1, WebDAV encodes method parameter | |
|
| information either in an XML [11] request entity body, or in an HTTP | | information either in an [XML] request entity body, or in an HTTP | |
| header. The use of XML to encode method parameters was motivated by | | header. The use of XML to encode method parameters was motivated by | |
| the ability to add extra XML elements to existing structures, | | the ability to add extra XML elements to existing structures, | |
| providing extensibility; and by XML's ability to encode information | | providing extensibility; and by XML's ability to encode information | |
| in ISO 10646 character sets, providing internationalization support. | | in ISO 10646 character sets, providing internationalization support. | |
| | | | |
| In addition to encoding method parameters, XML is used in WebDAV to | | In addition to encoding method parameters, XML is used in WebDAV to | |
| encode the responses from methods, providing the extensibility and | | encode the responses from methods, providing the extensibility and | |
| internationalization advantages of XML for method output, as well as | | internationalization advantages of XML for method output, as well as | |
| input. | | input. | |
| | | | |
|
| The XML namespace extension [10] is also used in this specification | | When XML is used for a request or response body, the MIME type SHOULD | |
| in order to allow for new XML elements to be added without fear of | | be application/xml. Implementations MUST accept both text/xml and | |
| colliding with other element names. Although WebDAV request and | | application/xml in request and response bodies. Use of text/xml is | |
| response bodies can be extended by arbitrary XML elements, which can | | deprecated. | |
| be ignored by the message recipient, an XML element in the "DAV:" | | | |
| namespace SHOULD NOT be used in the request or response body unless | | The XML namespace extension [W3C.REC-xml-names-19990114] is also used | |
| that XML element is explicitly defined in an IETF RFC reviewed by a | | in this specification in order to allow for new XML elements to be | |
| WebDAV working group. | | added without fear of colliding with other element names. Although | |
| | | WebDAV request and response bodies can be extended by arbitrary XML | |
| | | elements, which can be ignored by the message recipient, an XML | |
| | | element in the "DAV:" namespace SHOULD NOT be used in the request or | |
| | | response body unless that XML element is explicitly defined in an | |
| | | IETF RFC reviewed by a WebDAV working group. | |
| | | | |
| Note that "DAV:" uses a scheme name defined solely for the purpose of | | Note that "DAV:" uses a scheme name defined solely for the purpose of | |
|
| creating this namespace. Defining new schemes for namespaces is | | creating this XML namespace. Defining new URI schemes for namespaces | |
| discouraged. "DAV:" was defined before standard best practices | | is discouraged. "DAV:" was defined before standard best practices | |
| emerged, and this namespace is still used only because of significant | | emerged, and this namespace is still used only because of significant | |
| existing deployments. | | existing deployments. | |
| | | | |
| 4.4. Property Values | | 4.4. Property Values | |
| | | | |
| The value of a property is always a (well-formed) XML fragment. | | The value of a property is always a (well-formed) XML fragment. | |
| | | | |
| XML has been chosen because it is a flexible, self-describing, | | XML has been chosen because it is a flexible, self-describing, | |
| structured data format that supports rich schema definitions, and | | structured data format that supports rich schema definitions, and | |
| because of its support for multiple character sets. XML's self- | | because of its support for multiple character sets. XML's self- | |
| describing nature allows any property's value to be extended by | | describing nature allows any property's value to be extended by | |
| adding new elements. Older clients will not break when they | | adding new elements. Older clients will not break when they | |
| encounter extensions because they will still have the data specified | | encounter extensions because they will still have the data specified | |
|
| in the original schema and will ignore elements they do not | | in the original schema and MUST ignore elements they do not | |
| understand. XML's support for multiple character sets allows any | | understand. | |
| human-readable property to be encoded and read in a character set | | | |
| familiar to the user. XML's support for multiple human languages, | | XML's support for multiple character sets allows any human-readable | |
| using the "xml:lang" attribute, handles cases where the same | | property to be encoded and read in a character set familiar to the | |
| character set is employed by multiple human languages. Note that | | user. XML's support for multiple human languages, using the "xml: | |
| xml:lang scope is recursive, so a xml:lang attribute on any element | | lang" attribute, handles cases where the same character set is | |
| containing a property name element applies to the property value | | employed by multiple human languages. Note that xml:lang scope is | |
| unless it has been overridden by a more locally scoped attribute. | | recursive, so a xml:lang attribute on any element containing a | |
| | | property name element applies to the property value unless it has | |
| | | been overridden by a more locally scoped attribute. Note that a | |
| | | property only has one value, in one language (or language MAY be left | |
| | | undefined), not multiple values in different languages or a single | |
| | | value in multiple languages. | |
| | | | |
| A property is always represented in XML with an XML element | | A property is always represented in XML with an XML element | |
|
| consisting of the property name. The simplest example is an empty | | consisting of the property name, called the "property name element". | |
| property, which is different from a property that does not exist. | | The simplest example is an empty property, which is different from a | |
| | | property that does not exist: | |
| | | | |
| <R:title xmlns:R="http://www.example.com/ns/"></R:title> | | <R:title xmlns:R="http://www.example.com/ns/"></R:title> | |
| | | | |
| The value of a property appears inside the property name element. | | The value of a property appears inside the property name element. | |
| The value may be any kind of well-formed XML content, including both | | The value may be any kind of well-formed XML content, including both | |
|
| text-only and mixed content. When the property value contains | | text-only and mixed content. In the latter case, servers MUST | |
| further XML elements, namespace names that are in scope for that part | | preserve certain aspects of the content (described using the | |
| of the XML document apply within the property value as well, and MUST | | terminology from [W3C.REC-xml-infoset-20040204]). | |
| be preserved in server storage for retransmission later. Namespace | | | |
| prefixes need not be preserved due to the rules of prefix declaration | | | |
| in XML. | | | |
| | | | |
|
| Attributes on the property name element may convey information about | | For the property name Element Information Item itself: | |
| the property, but are not considered part of the value. However, | | | |
| when language information appears in the 'xml:lang' attribute on the | | [namespace name] | |
| property name element, the language information MUST be preserved in | | | |
| server storage for retransmission later. Note that a property only | | [local name] | |
| has one value, in one language (or language MAY be left undefined), | | | |
| not multiple values in different languages or a single value in | | [attributes] named "xml:lang" or any such attribute in scope | |
| multiple languages. | | | |
| | | [children] of type element or character | |
| | | | |
| | | On all Element Information Items in the value: | |
| | | | |
| | | [namespace name] | |
| | | | |
| | | [local name] | |
| | | | |
| | | [attributes] | |
| | | | |
| | | [children] of type element or character | |
| | | | |
| | | On Attribute Information Items in the value: | |
| | | | |
| | | [namespace name] | |
| | | | |
| | | [local name] | |
| | | | |
| | | [normalized value] | |
| | | | |
| | | On Character Information Items in the value: | |
| | | | |
| | | [character code] | |
| | | | |
| | | Since prefixes are used in some XML query/handling tools, servers | |
| | | SHOULD preserve, for any Information Item in the value: | |
| | | | |
| | | [prefix] | |
| | | | |
| | | In dead properties (considered as content, like document bodies) | |
| | | servers are encouraged to (MAY) preserve, for any Comment Information | |
| | | Item in the value: | |
| | | | |
| | | [content] | |
| | | | |
| | | XML Infoset attributes not listed above MAY be preserved by the | |
| | | server, but clients MUST NOT rely on them being preserved. | |
| | | | |
| The XML attribute xml:space MUST NOT be used to change white space | | The XML attribute xml:space MUST NOT be used to change white space | |
| handling. White space in property values is significant. | | handling. White space in property values is significant. | |
| | | | |
|
| | | 4.4.1. Example - Property with Mixed Content | |
| | | | |
| | | Consider a dead property 'author' created by the client as follows: | |
| | | | |
| | | <D:prop xml:lang="en"> | |
| | | <x:author xmlns:x='http://example.com/ns'> | |
| | | <x:name>Jane Doe</x:name> | |
| | | <!-- Jane's contact info --> | |
| | | <x:uri type='email' | |
| | | added='2005-11-26'>mailto:jane.doe@example.com</x:uri> | |
| | | <x:uri type='web' | |
| | | added='2005-11-27'>http://www.example.com</x:uri> | |
| | | <x:notes xmlns:h='http://www.w3.org/1999/xhtml'> | |
| | | Jane has been working way <h:em>too</h:em> long on the | |
| | | long-awaited revision of <![CDATA[<RFC2518>]]>. | |
| | | </x:notes> | |
| | | </x:author> | |
| | | </D:prop> | |
| | | | |
| | | When this property is requested, a server might return: | |
| | | | |
| | | <author xmlns:x='http://example.com/ns' xml:lang="en" | |
| | | xmlns='http://example.com/ns' | |
| | | xmlns:ns1='http://www.w3.org/1999/xhtml'> | |
| | | <x:name>Jane Doe</name> | |
| | | <x:uri added="2005-11-26" type="email" | |
| | | >mailto:jane.doe@example.com</uri> | |
| | | <x:uri added="2005-11-27" type="web" | |
| | | >http://www.example.com</uri> | |
| | | <x:notes> | |
| | | Jane has been working way <h:em>too</h:em> long on the | |
| | | long-awaited revision of <RFC2518>. | |
| | | </x:notes> | |
| | | </author> | |
| | | Note in this example: | |
| | | | |
| | | o The [prefix] for the property name itself was not preserved, being | |
| | | non-significant | |
| | | | |
| | | o attribute values have been rewritten with double quotes instead of | |
| | | single quotes (quoting style is not significant), and attribute | |
| | | order has not been preserved, | |
| | | | |
| | | o the xml:lang attribute has been returned on the property name | |
| | | element itself (it was in scope when the property was set, but the | |
| | | exact position in the response is not considered significant as | |
| | | long as it is in scope), | |
| | | | |
| | | o whitespace between tags has been preserved everywhere (whitespace | |
| | | between attributes not so), | |
| | | | |
| | | o CDATA encapsulation was replaced with character escaping (the | |
| | | reverse would also be legal), | |
| | | | |
| | | o the comment item was stripped (as would have been a processing | |
| | | instruction item). | |
| | | | |
| | | Implementation note: there are cases such as editing scenarios where | |
| | | clients may require that XML content is preserved character-by- | |
| | | character (such as attribute ordering or quoting style). In this | |
| | | case, clients should consider using a text-only property value by | |
| | | escaping all characters that have a special meaning in XML parsing. | |
| | | | |
| 4.5. Property Names | | 4.5. Property Names | |
| | | | |
| A property name is a universally unique identifier that is associated | | A property name is a universally unique identifier that is associated | |
| with a schema that provides information about the syntax and | | with a schema that provides information about the syntax and | |
| semantics of the property. | | semantics of the property. | |
| | | | |
| Because a property's name is universally unique, clients can depend | | Because a property's name is universally unique, clients can depend | |
| upon consistent behavior for a particular property across multiple | | upon consistent behavior for a particular property across multiple | |
| resources, on the same and across different servers, so long as that | | resources, on the same and across different servers, so long as that | |
| property is "live" on the resources in question, and the | | property is "live" on the resources in question, and the | |
| implementation of the live property is faithful to its definition. | | implementation of the live property is faithful to its definition. | |
| | | | |
|
| The XML namespace mechanism, which is based on URIs [8], is used to | | The XML namespace mechanism, which is based on URIs ([RFC3986]), is | |
| name properties because it prevents namespace collisions and provides | | used to name properties because it prevents namespace collisions and | |
| for varying degrees of administrative control. | | provides for varying degrees of administrative control. | |
| | | | |
| The property namespace is flat; that is, no hierarchy of properties | | The property namespace is flat; that is, no hierarchy of properties | |
| is explicitly recognized. Thus, if a property A and a property A/B | | is explicitly recognized. Thus, if a property A and a property A/B | |
| exist on a resource, there is no recognition of any relationship | | exist on a resource, there is no recognition of any relationship | |
| between the two properties. It is expected that a separate | | between the two properties. It is expected that a separate | |
| specification will eventually be produced which will address issues | | specification will eventually be produced which will address issues | |
| relating to hierarchical properties. | | relating to hierarchical properties. | |
| | | | |
| Finally, it is not possible to define the same property twice on a | | Finally, it is not possible to define the same property twice on a | |
| single resource, as this would cause a collision in the resource's | | single resource, as this would cause a collision in the resource's | |
| | | | |
| skipping to change at page 15, line 35 | | skipping to change at page 17, line 35 | |
| consideration is exempt from the previous rule. The top-level | | consideration is exempt from the previous rule. The top-level | |
| collection of the namespace under consideration is not necessarily | | collection of the namespace under consideration is not necessarily | |
| the collection identified by the absolute path '/', it may be | | the collection identified by the absolute path '/', it may be | |
| identified by one or more path segments (e.g. /servlets/webdav/...) | | identified by one or more path segments (e.g. /servlets/webdav/...) | |
| | | | |
| Neither HTTP/1.1 nor WebDAV require that the entire HTTP URL | | Neither HTTP/1.1 nor WebDAV require that the entire HTTP URL | |
| namespace be consistent -- a WebDAV-compatible resource may not have | | namespace be consistent -- a WebDAV-compatible resource may not have | |
| a parent collection. However, certain WebDAV methods are prohibited | | a parent collection. However, certain WebDAV methods are prohibited | |
| from producing results that cause namespace inconsistencies. | | from producing results that cause namespace inconsistencies. | |
| | | | |
|
| Although implicit in RFC2616 [6] and RFC3986 [8], any resource, | | Although implicit in [RFC2616] and [RFC3986], any resource, including | |
| including collection resources, MAY be identified by more than one | | collection resources, MAY be identified by more than one URI. For | |
| URI. For example, a resource could be identified by multiple HTTP | | example, a resource could be identified by multiple HTTP URLs. | |
| URLs. | | | |
| | | | |
| 5.2. Collection Resources | | 5.2. Collection Resources | |
| | | | |
| A collection is a resource whose state consists of at least a list of | | A collection is a resource whose state consists of at least a list of | |
| internal member URLs and a set of properties, but which may have | | internal member URLs and a set of properties, but which may have | |
| additional state such as entity bodies returned by GET. An internal | | additional state such as entity bodies returned by GET. An internal | |
| member URL MUST be immediately relative to a base URL of the | | member URL MUST be immediately relative to a base URL of the | |
| collection. That is, the internal member URL is equal to a | | collection. That is, the internal member URL is equal to a | |
| containing collection's URL plus an additional segment for non- | | containing collection's URL plus an additional segment for non- | |
| collection resources, or additional segment plus trailing slash "/" | | collection resources, or additional segment plus trailing slash "/" | |
| for collection resources, where segment is defined in section 3.3 of | | for collection resources, where segment is defined in section 3.3 of | |
|
| RFC3986 [8]. | | [RFC3986]. | |
| | | | |
| Any given internal member URL MUST only belong to the collection | | Any given internal member URL MUST only belong to the collection | |
| once, i.e., it is illegal to have multiple instances of the same URL | | once, i.e., it is illegal to have multiple instances of the same URL | |
| in a collection. Properties defined on collections behave exactly as | | in a collection. Properties defined on collections behave exactly as | |
| do properties on non-collection resources. | | do properties on non-collection resources. | |
| | | | |
| For all WebDAV compliant resources A and B, identified by URLs U and | | For all WebDAV compliant resources A and B, identified by URLs U and | |
| V, for which U is immediately relative to V, B MUST be a collection | | V, for which U is immediately relative to V, B MUST be a collection | |
| that has U as an internal member URL. So, if the resource with URL | | that has U as an internal member URL. So, if the resource with URL | |
| http://example.com/bar/blah is WebDAV compliant and if the resource | | http://example.com/bar/blah is WebDAV compliant and if the resource | |
| | | | |
| skipping to change at page 16, line 37 | | skipping to change at page 18, line 36 | |
| | | | |
| There is a standing convention that when a collection is referred to | | There is a standing convention that when a collection is referred to | |
| by its name without a trailing slash, the server MAY handle the | | by its name without a trailing slash, the server MAY handle the | |
| request as if the trailing slash were present. In this case it | | request as if the trailing slash were present. In this case it | |
| SHOULD return a Content-Location header in the response, pointing to | | SHOULD return a Content-Location header in the response, pointing to | |
| the URL ending with the "/". For example, if a client invokes a | | the URL ending with the "/". For example, if a client invokes a | |
| method on http://example.com/blah (no trailing slash), the server may | | method on http://example.com/blah (no trailing slash), the server may | |
| respond as if the operation were invoked on http://example.com/blah/ | | respond as if the operation were invoked on http://example.com/blah/ | |
| (trailing slash), and should return a Content-Location header with | | (trailing slash), and should return a Content-Location header with | |
| the value http://example.com/blah/. Wherever a server produces a URL | | the value http://example.com/blah/. Wherever a server produces a URL | |
|
| referring to a collection, the server MUST include the trailing | | referring to a collection, the server SHOULD include the trailing | |
| slash. In general clients SHOULD use the "/" form of collection | | slash. In general clients SHOULD use the trailing slash form of | |
| names. | | collection names. If clients do not use the trailing slash form the | |
| | | client needs to be prepared to see a redirect response. Clients will | |
| | | find the DAV:resourcetype property more reliable than the URL to find | |
| | | out if a resource is a collection. | |
| | | | |
| Clients MUST be able to support the case where WebDAV resources are | | Clients MUST be able to support the case where WebDAV resources are | |
| contained inside non-WebDAV resources. For example, if a OPTIONS | | contained inside non-WebDAV resources. For example, if a OPTIONS | |
| response from "http://example.com/servlet/dav/collection" indicates | | response from "http://example.com/servlet/dav/collection" indicates | |
| WebDAV support, the client cannot assume that | | WebDAV support, the client cannot assume that | |
| "http://example.com/servlet/dav/" or its parent necessarily are | | "http://example.com/servlet/dav/" or its parent necessarily are | |
| WebDAV collections. | | WebDAV collections. | |
| | | | |
| 6. Locking | | 6. Locking | |
| | | | |
| | | | |
| skipping to change at page 19, line 18 | | skipping to change at page 21, line 18 | |
| lock token or modify the locked resource. Anyone can find out anyone | | lock token or modify the locked resource. Anyone can find out anyone | |
| else's lock token by performing lock discovery. Write access and | | else's lock token by performing lock discovery. Write access and | |
| other privileges MUST be enforced through normal privilege or | | other privileges MUST be enforced through normal privilege or | |
| authentication mechanisms, not based on the slight obscurity of lock | | authentication mechanisms, not based on the slight obscurity of lock | |
| token values. | | token values. | |
| | | | |
| Since lock tokens are unique, a client MAY submit a lock token in an | | Since lock tokens are unique, a client MAY submit a lock token in an | |
| If header on a resource other than the one that returned it. | | If header on a resource other than the one that returned it. | |
| | | | |
| This specification encourages servers to create UUIDs for lock | | This specification encourages servers to create UUIDs for lock | |
|
| tokens, and to use the URI form defined by A Universally Unique | | tokens, and to use the URI form defined by "A Universally Unique | |
| Identifier (UUID) URN Namespace [9]. However servers are free to use | | Identifier (UUID) URN Namespace" ([RFC4122]). However servers are | |
| another valid URI so long as it meets the uniqueness requirements. | | free to use any URI (e.g. from another scheme) so long as it meets | |
| For example, a valid lock token might be constructed using the | | the uniqueness requirements. For example, a valid lock token might | |
| "opaquelocktoken" scheme defined in an appendix of this document. | | be constructed using the "opaquelocktoken" scheme defined in | |
| | | Appendix C. | |
| | | | |
| Example: "urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6" | | Example: "urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6" | |
| | | | |
| 6.4. Lock Capability Discovery | | 6.4. Lock Capability Discovery | |
| | | | |
| Since server lock support is optional, a client trying to lock a | | Since server lock support is optional, a client trying to lock a | |
| resource on a server can either try the lock and hope for the best, | | resource on a server can either try the lock and hope for the best, | |
| or perform some form of discovery to determine what lock capabilities | | or perform some form of discovery to determine what lock capabilities | |
| the server supports. This is known as lock capability discovery. A | | the server supports. This is known as lock capability discovery. A | |
| client can determine what lock types the server supports by | | client can determine what lock types the server supports by | |
|
| retrieving the supportedlock property. | | retrieving the DAV:supportedlock property. | |
| | | | |
| Any DAV compliant resource that supports the LOCK method MUST support | | Any DAV compliant resource that supports the LOCK method MUST support | |
|
| the supportedlock property. | | the DAV:supportedlock property. | |
| | | | |
| 6.5. Active Lock Discovery | | 6.5. Active Lock Discovery | |
| | | | |
| If another principal locks a resource that a principal wishes to | | If another principal locks a resource that a principal wishes to | |
| access, it is useful for the second principal to be able to find out | | access, it is useful for the second principal to be able to find out | |
|
| who the first principal is. For this purpose the lockdiscovery | | who the first principal is. For this purpose the DAV:lockdiscovery | |
| property is provided. This property lists all outstanding locks, | | property is provided. This property lists all outstanding locks, | |
|
| describes their type, and where available, provides their lock token. | | describes their type, and MAY even provide the lock tokens. | |
| | | | |
| Any DAV compliant resource that supports the LOCK method MUST support | | Any DAV compliant resource that supports the LOCK method MUST support | |
|
| the lockdiscovery property. | | the DAV:lockdiscovery property. | |
| | | | |
| 6.6. Locks and Multiple Bindings | | 6.6. Locks and Multiple Bindings | |
| | | | |
| A resource may be made available through more than one URI. However | | A resource may be made available through more than one URI. However | |
| locks apply to resources, not URIs. Therefore a LOCK request on a | | locks apply to resources, not URIs. Therefore a LOCK request on a | |
| resource MUST NOT succeed if can not be honored by all the URIs | | resource MUST NOT succeed if can not be honored by all the URIs | |
| through which the resource is addressable. | | through which the resource is addressable. | |
| | | | |
| 7. Write Lock | | 7. Write Lock | |
| | | | |
| | | | |
| skipping to change at page 23, line 32 | | skipping to change at page 25, line 32 | |
| | | | |
| It is possible to lock an unmapped URL in order to lock the name for | | It is possible to lock an unmapped URL in order to lock the name for | |
| use. This is a simple way to avoid the lost-update problem on the | | use. This is a simple way to avoid the lost-update problem on the | |
| creation of a new resource (another way is to use If-None-Match | | creation of a new resource (another way is to use If-None-Match | |
| header specified in HTTP 1.1). It has the side benefit of locking | | header specified in HTTP 1.1). It has the side benefit of locking | |
| the new resource immediately for use of the creator. | | the new resource immediately for use of the creator. | |
| | | | |
| The lost-update problem is not an issue for collections because MKCOL | | The lost-update problem is not an issue for collections because MKCOL | |
| can only be used to create a collection, not to overwrite an existing | | can only be used to create a collection, not to overwrite an existing | |
| collection. When trying to lock a collection upon creation, clients | | collection. When trying to lock a collection upon creation, clients | |
|
| may attempt to increase the likelihood of this by pipelining the | | may attempt to increase the likelihood of getting the lock by | |
| MKCOL and LOCK requests together (but because this doesn't convert | | pipelining the MKCOL and LOCK requests together (but because this | |
| two separate operations into one atomic operation there's no | | doesn't convert two separate operations into one atomic operation | |
| guarantee this will work). | | there's no guarantee this will work). | |
| | | | |
|
| A lock request to an unmapped URL SHOULD result in the creation of an | | A successful lock request to an unmapped URL MUST result in the | |
| locked resource with empty content. A subsequent PUT request with | | creation of an locked resource with empty content. Subsequently, a | |
| the correct lock token SHOULD normally succeed, and this new request | | successful PUT request (with the correct lock token) provides the | |
| provides the content, content-type, content-language and other | | content for the resource, and the server MUST also use the content- | |
| information as appropriate. | | type and content-language information from this request. | |
| | | | |
|
| In this situation, a WebDAV server that was implemented from RFC2518 | | In this situation, a WebDAV server that was implemented from | |
| MAY create "lock-null" resources which are special and unusual | | [RFC2518] MAY create "lock-null" resources which are special and | |
| resources. Historically, a lock-null resource: | | unusual resources. Historically, a lock-null resource: | |
| | | | |
| o Responds with a 404 or 405 to any DAV method except for PUT, | | o Responds with a 404 or 405 to any DAV method except for PUT, | |
| MKCOL, OPTIONS, PROPFIND, LOCK, UNLOCK. | | MKCOL, OPTIONS, PROPFIND, LOCK, UNLOCK. | |
| | | | |
| o Appears as a member of its parent collection. | | o Appears as a member of its parent collection. | |
| | | | |
| o Disappears (URI becomes unmapped) if its lock goes away before it | | o Disappears (URI becomes unmapped) if its lock goes away before it | |
| is converted to a regular resource. (This must also happen if it | | is converted to a regular resource. (This must also happen if it | |
| is renamed or moved, or if any parent collection is renamed or | | is renamed or moved, or if any parent collection is renamed or | |
| moved, because locks are tied to URLs). | | moved, because locks are tied to URLs). | |
| | | | |
| o May be turned into a regular resource when a PUT request to the | | o May be turned into a regular resource when a PUT request to the | |
| URL is successful. Ceases to be a lock-null resource. | | URL is successful. Ceases to be a lock-null resource. | |
| | | | |
| o May be turned into a collection when a MKCOL request to the URL is | | o May be turned into a collection when a MKCOL request to the URL is | |
| successful. Ceases to be a lock-null resource. | | successful. Ceases to be a lock-null resource. | |
| | | | |
|
| o Has defined values for lockdiscovery and supportedlock properties. | | o Has defined values for DAV:lockdiscovery and DAV:supportedlock | |
| | | properties. | |
| | | | |
| However, interoperability and compliance problems have been found | | However, interoperability and compliance problems have been found | |
| with lock-null resources. Therefore, they are deprecated. WebDAV | | with lock-null resources. Therefore, they are deprecated. WebDAV | |
| servers SHOULD create regular locked empty resources, which are and | | servers SHOULD create regular locked empty resources, which are and | |
| behave in every way as normal resources. A locked empty resource: | | behave in every way as normal resources. A locked empty resource: | |
| | | | |
| o Can be read, deleted, moved, copied, and in all ways behave as a | | o Can be read, deleted, moved, copied, and in all ways behave as a | |
| regular resource, not a lock-null resource. | | regular resource, not a lock-null resource. | |
| | | | |
| o Appears as a member of its parent collection. | | o Appears as a member of its parent collection. | |
| | | | |
| o SHOULD NOT disappear when its lock goes away (clients must | | o SHOULD NOT disappear when its lock goes away (clients must | |
| therefore be responsible for cleaning up their own mess, as with | | therefore be responsible for cleaning up their own mess, as with | |
| any other operation) | | any other operation) | |
| | | | |
| o SHOULD default to having no content type. | | o SHOULD default to having no content type. | |
| | | | |
|
| o MAY NOT have values for properties like getcontentlanguage which | | o MAY NOT have values for properties like DAV:getcontentlanguage | |
| haven't been specified yet by the client. | | which haven't been specified yet by the client. | |
| | | | |
| o May have content added with a PUT request. MUST be able to change | | o May have content added with a PUT request. MUST be able to change | |
| content type. | | content type. | |
| | | | |
| o MUST NOT be turned into a collection. A MKCOL request must fail | | o MUST NOT be turned into a collection. A MKCOL request must fail | |
| as it would to any existing resource. | | as it would to any existing resource. | |
| | | | |
|
| o MUST have defined values for lockdiscovery and supportedlock | | o MUST have defined values for DAV:lockdiscovery and DAV: | |
| properties. | | supportedlock properties. | |
| | | | |
| o The response MUST indicate that a resource was created, by use of | | o The response MUST indicate that a resource was created, by use of | |
| the "201 Created" response code (a LOCK request to an existing | | the "201 Created" response code (a LOCK request to an existing | |
| resource instead will result in 200 OK). The body must still | | resource instead will result in 200 OK). The body must still | |
|
| include the lockdiscovery property, as with a LOCK request to an | | include the DAV:lockdiscovery property, as with a LOCK request to | |
| existing resource. | | an existing resource. | |
| | | | |
| The client is expected to update the locked empty resource shortly | | The client is expected to update the locked empty resource shortly | |
| after locking it, using PUT and possibly PROPPATCH. When the client | | after locking it, using PUT and possibly PROPPATCH. When the client | |
| uses PUT to overwrite a locked empty resource the client MUST supply | | uses PUT to overwrite a locked empty resource the client MUST supply | |
| a Content-Type if any is known. If the client supplies a Content- | | a Content-Type if any is known. If the client supplies a Content- | |
| Type value the server MUST set that value (this requirement actually | | Type value the server MUST set that value (this requirement actually | |
| applies to any resource that is overwritten but is particularly | | applies to any resource that is overwritten but is particularly | |
| necessary for locked empty resources which are initially created with | | necessary for locked empty resources which are initially created with | |
| no Content-Type. | | no Content-Type. | |
| | | | |
| | | | |
| skipping to change at page 25, line 38 | | skipping to change at page 27, line 40 | |
| binding name, this request MUST fail if the principal does not | | binding name, this request MUST fail if the principal does not | |
| provide the correct lock token for the locked collection. | | provide the correct lock token for the locked collection. | |
| | | | |
| This means that if a collection is locked (depth 0 or infinity), its | | This means that if a collection is locked (depth 0 or infinity), its | |
| lock-token is required in all these cases: | | lock-token is required in all these cases: | |
| | | | |
| o DELETE a collection's direct internal member | | o DELETE a collection's direct internal member | |
| | | | |
| o MOVE a member out of the collection | | o MOVE a member out of the collection | |
| | | | |
|
| o MOVE a member into the collection, unless it overwrites a pre- | | o MOVE a member into the collection | |
| existing member | | | |
| | | | |
|
| o MOVE to rename it within a collection, | | o MOVE to rename a member within a collection | |
| | | | |
|
| o COPY a member into a collection, unless it overwrites a pre- | | o COPY a member into a collection | |
| existing member | | | |
| | | | |
| o PUT or MKCOL request which would create a new member. | | o PUT or MKCOL request which would create a new member. | |
| | | | |
| The collection's lock token is required in addition to the lock token | | The collection's lock token is required in addition to the lock token | |
| on the internal member itself, if it is locked separately. | | on the internal member itself, if it is locked separately. | |
| | | | |
| In addition, a depth-infinity lock affects all write operations to | | In addition, a depth-infinity lock affects all write operations to | |
| all descendents of the locked collection. With a depth-infinity | | all descendents of the locked collection. With a depth-infinity | |
| lock, the root of the lock is directly locked, and all its | | lock, the root of the lock is directly locked, and all its | |
| descendants are indirectly locked. | | descendants are indirectly locked. | |
| | | | |
| skipping to change at page 26, line 24 | | skipping to change at page 28, line 23 | |
| o Any indirectly locked resource moved out of a locked source | | o Any indirectly locked resource moved out of a locked source | |
| collection into a depth-infinity locked target collection remains | | collection into a depth-infinity locked target collection remains | |
| indirectly locked but is now within the scope of the lock on the | | indirectly locked but is now within the scope of the lock on the | |
| target collection (the target collection's lock token will | | target collection (the target collection's lock token will | |
| thereafter be required to make further changes). | | thereafter be required to make further changes). | |
| | | | |
| If a depth-infinity write LOCK request is issued to a collection | | If a depth-infinity write LOCK request is issued to a collection | |
| containing member URLs identifying resources that are currently | | containing member URLs identifying resources that are currently | |
| locked in a manner which conflicts with the write lock, the request | | locked in a manner which conflicts with the write lock, the request | |
| MUST fail with a 423 (Locked) status code, and the response SHOULD | | MUST fail with a 423 (Locked) status code, and the response SHOULD | |
|
| contain the 'missing-lock-token' precondition. | | contain the 'lock-token-present' precondition. | |
| | | | |
| If a lock owner causes the URL of a resource to be added as an | | If a lock owner causes the URL of a resource to be added as an | |
| internal member URL of a depth-infinity locked collection then the | | internal member URL of a depth-infinity locked collection then the | |
| new resource MUST be automatically added to the lock. This is the | | new resource MUST be automatically added to the lock. This is the | |
| only mechanism that allows a resource to be added to a write lock. | | only mechanism that allows a resource to be added to a write lock. | |
| Thus, for example, if the collection /a/b/ is write locked and the | | Thus, for example, if the collection /a/b/ is write locked and the | |
| resource /c is moved to /a/b/c then resource /a/b/c will be added to | | resource /c is moved to /a/b/c then resource /a/b/c will be added to | |
| the write lock. | | the write lock. | |
| | | | |
| 7.8. Write Locks and the If Request Header | | 7.8. Write Locks and the If Request Header | |
| | | | |
| skipping to change at page 27, line 11 | | skipping to change at page 29, line 10 | |
| same authorization. | | same authorization. | |
| | | | |
| In order to prevent these collisions a lock token MUST be submitted | | In order to prevent these collisions a lock token MUST be submitted | |
| by an authorized principal for all locked resources that a method may | | by an authorized principal for all locked resources that a method may | |
| change or the method MUST fail. A lock token is submitted when it | | change or the method MUST fail. A lock token is submitted when it | |
| appears in an If header. For example, if a resource is to be moved | | appears in an If header. For example, if a resource is to be moved | |
| and both the source and destination are locked then two lock tokens | | and both the source and destination are locked then two lock tokens | |
| must be submitted in the if header, one for the source and the other | | must be submitted in the if header, one for the source and the other | |
| for the destination. | | for the destination. | |
| | | | |
|
| Example - Write Lock | | 7.8.1. Example - Write Lock | |
| | | | |
| >>Request | | >>Request | |
| | | | |
| COPY /~fielding/index.html HTTP/1.1 | | COPY /~fielding/index.html HTTP/1.1 | |
| Host: www.ics.uci.edu | | Host: www.ics.uci.edu | |
| Destination: http://www.ics.uci.edu/users/f/fielding/index.html | | Destination: http://www.ics.uci.edu/users/f/fielding/index.html | |
| If: <http://www.ics.uci.edu/users/f/fielding/index.html> | | If: <http://www.ics.uci.edu/users/f/fielding/index.html> | |
| (<urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6>) | | (<urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6>) | |
| | | | |
| >>Response | | >>Response | |
| | | | |
| skipping to change at page 27, line 47 | | skipping to change at page 29, line 46 | |
| resource into a collection that is locked with "Depth: infinity", | | resource into a collection that is locked with "Depth: infinity", | |
| then the resource will be added to the lock. | | then the resource will be added to the lock. | |
| | | | |
| A successful MOVE request on a write locked resource MUST NOT move | | A successful MOVE request on a write locked resource MUST NOT move | |
| the write lock with the resource. However, the resource is subject | | the write lock with the resource. However, the resource is subject | |
| to being added to an existing lock at the destination (see | | to being added to an existing lock at the destination (see | |
| Section 7.7). For example, if the MOVE makes the resource a child of | | Section 7.7). For example, if the MOVE makes the resource a child of | |
| a collection that is locked with "Depth: infinity", then the resource | | a collection that is locked with "Depth: infinity", then the resource | |
| will be added to that collection's lock. Additionally, if a resource | | will be added to that collection's lock. Additionally, if a resource | |
| locked with "Depth: infinity" is moved to a destination that is | | locked with "Depth: infinity" is moved to a destination that is | |
|
| within the scope of the same lock (e.g., within the namespace tree | | within the scope of the same lock (e.g., within the URL namespace | |
| covered by the lock), the moved resource will again be a added to the | | tree covered by the lock), the moved resource will again be a added | |
| lock. In both these examples, as specified in Section 7.8, an If | | to the lock. In both these examples, as specified in Section 7.8, an | |
| header must be submitted containing a lock token for both the source | | If header must be submitted containing a lock token for both the | |
| and destination. | | source and destination. | |
| | | | |
| 7.10. Refreshing Write Locks | | 7.10. Refreshing Write Locks | |
| | | | |
| A client MUST NOT submit the same write lock request twice. Note | | A client MUST NOT submit the same write lock request twice. Note | |
| that a client is always aware it is resubmitting the same lock | | that a client is always aware it is resubmitting the same lock | |
| request because it must include the lock token in the If header in | | request because it must include the lock token in the If header in | |
| order to make the request for a resource that is already locked. | | order to make the request for a resource that is already locked. | |
| | | | |
| However, a client may submit a LOCK method with an If header but | | However, a client may submit a LOCK method with an If header but | |
| without a body. This form of LOCK MUST only be used to "refresh" a | | without a body. This form of LOCK MUST only be used to "refresh" a | |
| | | | |
| skipping to change at page 29, line 7 | | skipping to change at page 31, line 7 | |
| headers of arbitrary value with their lock refresh requests. | | headers of arbitrary value with their lock refresh requests. | |
| Servers, as always, may ignore Timeout headers submitted by the | | Servers, as always, may ignore Timeout headers submitted by the | |
| client. Note that timeout is measured in seconds remaining until | | client. Note that timeout is measured in seconds remaining until | |
| expiration. | | expiration. | |
| | | | |
| If an error is received in response to a refresh LOCK request the | | If an error is received in response to a refresh LOCK request the | |
| client MUST NOT assume that the lock was refreshed. | | client MUST NOT assume that the lock was refreshed. | |
| | | | |
| 8. HTTP Methods for Distributed Authoring | | 8. HTTP Methods for Distributed Authoring | |
| | | | |
|
| 8.1. General request and response handling | | 8.1. General Request and Response Handling | |
| | | | |
| 8.1.1. Use of XML | | 8.1.1. Use of XML | |
| | | | |
| Some of the following new HTTP methods use XML as a request and | | Some of the following new HTTP methods use XML as a request and | |
| response format. All DAV compliant clients and resources MUST use | | response format. All DAV compliant clients and resources MUST use | |
|
| XML parsers that are compliant with XML [11] and XML Namespaces [10]. | | XML parsers that are compliant with [XML] and XML Namespaces | |
| All XML used in either requests or responses MUST be, at minimum, | | [W3C.REC-xml-names-19990114]. All XML used in either requests or | |
| well formed and use namespaces correctly. If a server receives non- | | responses MUST be, at minimum, well formed and use namespaces | |
| wellformed XML in a request it MUST reject the entire request with a | | correctly. If a server receives XML that is not well-formed then the | |
| 400 (Bad Request). If a client receives ill-formed XML in a response | | server MUST reject the entire request with a 400 (Bad Request). If a | |
| then it MUST NOT assume anything about the outcome of the executed | | client receives XML that is not well-formed in a response then the | |
| | | client MUST NOT assume anything about the outcome of the executed | |
| method and SHOULD treat the server as malfunctioning. | | method and SHOULD treat the server as malfunctioning. | |
| | | | |
|
| | | Note that processing XML submitted by an untrusted source may cause | |
| | | risks connected to privacy, security, and service quality (see | |
| | | Section 19). Servers MAY reject questionable requests (even though | |
| | | they consist of well-formed XML), for instance with a 400 (Bad | |
| | | Request) status code and an optional response body explaining the | |
| | | problem. | |
| | | | |
| 8.1.2. Required Bodies in Requests | | 8.1.2. Required Bodies in Requests | |
| | | | |
| Some of these new methods do not define bodies. Servers MUST examine | | Some of these new methods do not define bodies. Servers MUST examine | |
| all requests for a body, even when a body was not expected. In cases | | all requests for a body, even when a body was not expected. In cases | |
| where a request body is present but would be ignored by a server, the | | where a request body is present but would be ignored by a server, the | |
| server MUST reject the request with 415 (Unsupported Media Type). | | server MUST reject the request with 415 (Unsupported Media Type). | |
| This informs the client (which may have been attempting to use an | | This informs the client (which may have been attempting to use an | |
| extension) that the body could not be processed as they intended. | | extension) that the body could not be processed as they intended. | |
| | | | |
| 8.1.3. HTTP Headers for use in WebDAV | | 8.1.3. HTTP Headers for use in WebDAV | |
| | | | |
| HTTP defines many headers that can be used in WebDAV requests and | | HTTP defines many headers that can be used in WebDAV requests and | |
| responses. Not all of these are appropriate in all situations and | | responses. Not all of these are appropriate in all situations and | |
| some interactions may be undefined. Note that HTTP 1.1 requires the | | some interactions may be undefined. Note that HTTP 1.1 requires the | |
|
| Date header in all responses if possible. | | Date header in all responses if possible (see section 14.18, | |
| | | [RFC2616]). | |
| | | | |
| 8.1.4. ETag | | 8.1.4. ETag | |
| | | | |
| HTTP 1.1 recommends the use of the ETag header in responses to GET | | HTTP 1.1 recommends the use of the ETag header in responses to GET | |
| and PUT requests. Correct use of ETags is even more important in a | | and PUT requests. Correct use of ETags is even more important in a | |
| distributed authoring environment, because ETags are necessary along | | distributed authoring environment, because ETags are necessary along | |
| with locks to avoid the lost-update problem. A client might fail to | | with locks to avoid the lost-update problem. A client might fail to | |
| renew a lock, for example when the lock times out and the client is | | renew a lock, for example when the lock times out and the client is | |
| accidentally offline or in the middle of a long upload. When a | | accidentally offline or in the middle of a long upload. When a | |
| client fails to renew the lock, it's quite possible the resource can | | client fails to renew the lock, it's quite possible the resource can | |
| still be relocked and the user can go on editing, as long as no | | still be relocked and the user can go on editing, as long as no | |
| changes were made in the meantime. ETags are required for the client | | changes were made in the meantime. ETags are required for the client | |
| to be able to distinguish this case. Otherwise, the client is forced | | to be able to distinguish this case. Otherwise, the client is forced | |
| to ask the user whether to overwrite the resource on the server | | to ask the user whether to overwrite the resource on the server | |
| without even being able to tell the user whether it has changed. | | without even being able to tell the user whether it has changed. | |
| Timestamps do not solve this problem nearly as well as ETags. | | Timestamps do not solve this problem nearly as well as ETags. | |
| | | | |
| WebDAV servers SHOULD support strong ETags for all resources that may | | WebDAV servers SHOULD support strong ETags for all resources that may | |
| be PUT. If ETags are supported for a resource, the server MUST | | be PUT. If ETags are supported for a resource, the server MUST | |
| return the ETag header in all PUT and GET responses to that resource, | | return the ETag header in all PUT and GET responses to that resource, | |
|
| as well as provide the same value for the 'getetag' property. | | as well as provide the same value for the DAV:getetag property. | |
| | | | |
| Because clients may be forced to prompt users or throw away changed | | Because clients may be forced to prompt users or throw away changed | |
| content if the ETag changes, a WebDAV server SHOULD NOT change the | | content if the ETag changes, a WebDAV server SHOULD NOT change the | |
|
| ETag (or getlastmodified value) for a resource that has an unchanged | | ETag (or DAV:getlastmodified value) for a resource that has an | |
| body. The ETag represents the state of the body or contents of the | | unchanged body. The ETag represents the state of the body or | |
| resource. There is no similar way to tell if properties have | | contents of the resource. There is no similar way to tell if | |
| changed. | | properties have changed. | |
| | | | |
| 8.1.5. Including error response bodies | | 8.1.5. Including error response bodies | |
| | | | |
| HTTP and WebDAV did not use the bodies of most error responses for | | HTTP and WebDAV did not use the bodies of most error responses for | |
| machine-parsable information until DeltaV introduced a mechanism to | | machine-parsable information until DeltaV introduced a mechanism to | |
| include more specific information in the body of an error response | | include more specific information in the body of an error response | |
|
| (section 1.6 of RFC3253 [14]). The mechanism is appropriate to use | | (section 1.6 of [RFC3253]). The mechanism is appropriate to use with | |
| with any error response that may take a body but does not already | | any error response that may take a body but does not already have a | |
| have a body defined. The mechanism is particularly appropriate when | | body defined. The mechanism is particularly appropriate when a | |
| a status code can mean many things (for example, 400 Bad Request can | | status code can mean many things (for example, 400 Bad Request can | |
| mean required headers are missing, headers are incorrectly formatted, | | mean required headers are missing, headers are incorrectly formatted, | |
| or much more). | | or much more). | |
| | | | |
| This mechanism does not take the place of using a correct numeric | | This mechanism does not take the place of using a correct numeric | |
| error code as defined here or in HTTP, because the client MUST always | | error code as defined here or in HTTP, because the client MUST always | |
| be able to take a reasonable course of action based only on the | | be able to take a reasonable course of action based only on the | |
| numeric error. However, it does remove the need to define new | | numeric error. However, it does remove the need to define new | |
| numeric error codes, avoiding the confusion of who is allowed to | | numeric error codes, avoiding the confusion of who is allowed to | |
| define such new codes. The codes used in this mechanism are XML | | define such new codes. The codes used in this mechanism are XML | |
| elements in a namespace, so naturally any group defining a new error | | elements in a namespace, so naturally any group defining a new error | |
| code can use their own namespace. As always, the "DAV:" namespace is | | code can use their own namespace. As always, the "DAV:" namespace is | |
| reserved for use by IETF-chartered WebDAV working groups. | | reserved for use by IETF-chartered WebDAV working groups. | |
| | | | |
| A server supporting "bis" SHOULD include a specific XML error code in | | A server supporting "bis" SHOULD include a specific XML error code in | |
| a "DAV:error" response body element, when a specific XML error code | | a "DAV:error" response body element, when a specific XML error code | |
| is defined in this document. The DAV:error element may contain | | is defined in this document. The DAV:error element may contain | |
| multiple elements describing specific errors. For error conditions | | multiple elements describing specific errors. For error conditions | |
| not specified in this document, the server MAY simply choose an | | not specified in this document, the server MAY simply choose an | |
| appropriate numeric status and leave the response body blank. | | appropriate numeric status and leave the response body blank. | |
| | | | |
|
| | | 8.1.5.1. Example - Response with precondition code | |
| | | | |
| | | >>Response | |
| | | | |
| HTTP/1.1 403 Forbidden | | HTTP/1.1 403 Forbidden | |
|
| Content-Type: text/xml; charset="utf-8" | | Content-Type: application/xml; charset="utf-8" | |
| Content-Length: xxxx | | Content-Length: xxxx | |
| | | | |
| <?xml version="1.0" encoding="utf-8" ?> | | <?xml version="1.0" encoding="utf-8" ?> | |
| <D:error xmlns:D="DAV:"> | | <D:error xmlns:D="DAV:"> | |
|
| <D:forbid-external-entities/> | | <D:no-external-entities/> | |
| </D:error> | | </D:error> | |
| | | | |
| In this specification, both the numeric and the XML error code are | | In this specification, both the numeric and the XML error code are | |
| defined for some failure situations, in which case the XML error code | | defined for some failure situations, in which case the XML error code | |
| must have the "DAV:" namespace, appear in the "error" root element, | | must have the "DAV:" namespace, appear in the "error" root element, | |
| and be returned in a body with the numeric error code specified. | | and be returned in a body with the numeric error code specified. | |
| | | | |
| 8.2. PROPFIND | | 8.2. PROPFIND | |
| | | | |
| The PROPFIND method retrieves properties defined on the resource | | The PROPFIND method retrieves properties defined on the resource | |
| identified by the Request-URI, if the resource does not have any | | identified by the Request-URI, if the resource does not have any | |
| internal members, or on the resource identified by the Request-URI | | internal members, or on the resource identified by the Request-URI | |
| and potentially its member resources, if the resource is a collection | | and potentially its member resources, if the resource is a collection | |
| that has internal member URLs. All DAV compliant resources MUST | | that has internal member URLs. All DAV compliant resources MUST | |
| support the PROPFIND method and the propfind XML element | | support the PROPFIND method and the propfind XML element | |
|
| (Section 13.25) along with all XML elements defined for use with that | | (Section 13.20) along with all XML elements defined for use with that | |
| element. | | element. | |
| | | | |
| A client may submit a Depth header with a value of "0", "1", or | | A client may submit a Depth header with a value of "0", "1", or | |
| "infinity" with a PROPFIND on a collection resource. Servers MUST | | "infinity" with a PROPFIND on a collection resource. Servers MUST | |
| support the "0", "1" and "infinity" behaviors on WebDAV-compliant | | support the "0", "1" and "infinity" behaviors on WebDAV-compliant | |
| resources. By default, the PROPFIND method without a Depth header | | resources. By default, the PROPFIND method without a Depth header | |
| MUST act as if a "Depth: infinity" header was included. | | MUST act as if a "Depth: infinity" header was included. | |
| | | | |
|
| A client may submit a propfind XML element in the body of the request | | A client may submit a 'propfind' XML element in the body of the | |
| method describing what information is being requested. It is | | request method describing what information is being requested. It is | |
| possible to: | | possible to: | |
| | | | |
| o Request particular property values, by naming the properties | | o Request particular property values, by naming the properties | |
| desired within the 'prop' element (the ordering of properties in | | desired within the 'prop' element (the ordering of properties in | |
| here MAY be ignored by server) | | here MAY be ignored by server) | |
| | | | |
| o Request all dead property values, by using 'dead-props' element. | | o Request all dead property values, by using 'dead-props' element. | |
| This can be combined with retrieving specific live properties | | This can be combined with retrieving specific live properties | |
|
| named as above. Servers advertising support for RFC2518bis MUST | | named as above. Servers advertising support for this | |
| support this feature. | | specification MUST support this feature. | |
| | | | |
| o Request property values for those properties defined in this | | o Request property values for those properties defined in this | |
| specification plus dead properties, by using 'allprop' element | | specification plus dead properties, by using 'allprop' element | |
| | | | |
| o Request a list of names of all the properties defined on the | | o Request a list of names of all the properties defined on the | |
| resource, by using the 'propname' element. | | resource, by using the 'propname' element. | |
| | | | |
| A client may choose not to submit a request body. An empty PROPFIND | | A client may choose not to submit a request body. An empty PROPFIND | |
| request body MUST be treated as if it were an 'allprop' request. | | request body MUST be treated as if it were an 'allprop' request. | |
| | | | |
| Note that 'allprop' does not return values for all live properties. | | Note that 'allprop' does not return values for all live properties. | |
| WebDAV servers increasingly have expensively-calculated or lengthy | | WebDAV servers increasingly have expensively-calculated or lengthy | |
|
| properties (see RFC3253 [14] and RFC3744 [15]) and do not return all | | properties (see [RFC3253] and [RFC3744]) and do not return all | |
| properties already. Instead, WebDAV clients can use propname | | properties already. Instead, WebDAV clients can use propname | |
| requests to discover what live properties exist, and request named | | requests to discover what live properties exist, and request named | |
| properties when retrieving values. A WebDAV server MAY omit certain | | properties when retrieving values. A WebDAV server MAY omit certain | |
| live properties from other specifications when responding to an | | live properties from other specifications when responding to an | |
|
| allprop request from an older client, and MAY return only custom | | 'allprop' request from an older client, and MAY return only custom | |
| (dead) properties and those defined in this specification. | | (dead) properties and those defined in this specification. | |
| | | | |
| All servers MUST support returning a response of content type text/ | | All servers MUST support returning a response of content type text/ | |
| xml or application/xml that contains a multistatus XML element that | | xml or application/xml that contains a multistatus XML element that | |
| describes the results of the attempts to retrieve the various | | describes the results of the attempts to retrieve the various | |
| properties. | | properties. | |
| | | | |
| If there is an error retrieving a property then a proper error result | | If there is an error retrieving a property then a proper error result | |
| MUST be included in the response. A request to retrieve the value of | | MUST be included in the response. A request to retrieve the value of | |
| a property which does not exist is an error and MUST be noted, if the | | a property which does not exist is an error and MUST be noted, if the | |
|
| response uses a multistatus XML element, with a response XML element | | response uses a 'multistatus' XML element, with a 'response' XML | |
| which contains a 404 (Not Found) status value. | | element which contains a 404 (Not Found) status value. | |
| | | | |
|
| Consequently, the multistatus XML element for a collection resource | | Consequently, the 'multistatus' XML element for a collection resource | |
| with member URLs MUST include a response XML element for each member | | with member URLs MUST include a 'response' XML element for each | |
| URL of the collection, to whatever depth was requested. Each | | member URL of the collection, to whatever depth was requested. Each | |
| response XML element MUST contain an href XML element that gives the | | 'response' XML element MUST contain an 'href' XML element that | |
| URL of the resource on which the properties in the prop XML element | | contains the URL of the resource on which the properties in the prop | |
| are defined. Results for a PROPFIND on a collection resource with | | XML element are defined. Results for a PROPFIND on a collection | |
| internal member URLs are returned as a flat list whose order of | | resource with internal member URLs are returned as a flat list whose | |
| entries is not significant. | | order of entries is not significant. | |
| | | | |
|
| Properties may be subject to access control. In the case of allprop | | Properties may be subject to access control. In the case of | |
| and propname, if a principal does not have the right to know whether | | 'allprop' and 'propname' requests, if a principal does not have the | |
| a particular property exists then the property MAY be silently | | right to know whether a particular property exists then the property | |
| excluded from the response. | | MAY be silently excluded from the response. | |
| | | | |
| The results of this method SHOULD NOT be cached. | | The results of this method SHOULD NOT be cached. | |
| | | | |
| 8.2.1. PROPFIND status codes | | 8.2.1. PROPFIND status codes | |
| | | | |
| A server MAY fail an entire PROPFIND request with an appropriate | | A server MAY fail an entire PROPFIND request with an appropriate | |
| status code and MAY redirect the entire request. In addition, the | | status code and MAY redirect the entire request. In addition, the | |
| following error codes are specifically defined for PROPFIND requests: | | following error codes are specifically defined for PROPFIND requests: | |
| | | | |
| 403 Forbidden - A server MAY reject all PROPFIND requests on | | 403 Forbidden - A server MAY reject all PROPFIND requests on | |
| collections with depth header of "Infinity", in which case it SHOULD | | collections with depth header of "Infinity", in which case it SHOULD | |
|
| use this error with the element 'propfind-infinite-depth-forbidden' | | use this error with the precondition code 'propfind-finite-depth' | |
| inside the error body. | | inside the error body. | |
| | | | |
| 8.2.2. Status codes for use with 207 (Multi-Status) | | 8.2.2. Status codes for use with 207 (Multi-Status) | |
| | | | |
| The following status codes are defined for use within the PROPFIND | | The following status codes are defined for use within the PROPFIND | |
| Multi-Status response: | | Multi-Status response: | |
| | | | |
| 200 OK - A property exists and/or its value is successfully | | 200 OK - A property exists and/or its value is successfully | |
| returned. | | returned. | |
| | | | |
| | | | |
| skipping to change at page 33, line 27 | | skipping to change at page 35, line 38 | |
| authentication. | | authentication. | |
| | | | |
| 404 Not Found - The property does not exist. | | 404 Not Found - The property does not exist. | |
| | | | |
| 8.2.3. Example - Retrieving Named Properties | | 8.2.3. Example - Retrieving Named Properties | |
| | | | |
| >>Request | | >>Request | |
| | | | |
| PROPFIND /file HTTP/1.1 | | PROPFIND /file HTTP/1.1 | |
| Host: www.example.com | | Host: www.example.com | |
|
| Content-type: text/xml; charset="utf-8" | | Content-type: application/xml; charset="utf-8" | |
| Content-Length: xxxx | | Content-Length: xxxx | |
| | | | |
| <?xml version="1.0" encoding="utf-8" ?> | | <?xml version="1.0" encoding="utf-8" ?> | |
| <D:propfind xmlns:D="DAV:"> | | <D:propfind xmlns:D="DAV:"> | |
| <D:prop xmlns:R="http://www.example.com/boxschema/"> | | <D:prop xmlns:R="http://www.example.com/boxschema/"> | |
| <R:bigbox/> | | <R:bigbox/> | |
| <R:author/> | | <R:author/> | |
| <R:DingALing/> | | <R:DingALing/> | |
| <R:Random/> | | <R:Random/> | |
| </D:prop> | | </D:prop> | |
| | | | |
| skipping to change at page 33, line 39 | | skipping to change at page 36, line 4 | |
| | | | |
| <?xml version="1.0" encoding="utf-8" ?> | | <?xml version="1.0" encoding="utf-8" ?> | |
| <D:propfind xmlns:D="DAV:"> | | <D:propfind xmlns:D="DAV:"> | |
| <D:prop xmlns:R="http://www.example.com/boxschema/"> | | <D:prop xmlns:R="http://www.example.com/boxschema/"> | |
| <R:bigbox/> | | <R:bigbox/> | |
| <R:author/> | | <R:author/> | |
| <R:DingALing/> | | <R:DingALing/> | |
| <R:Random/> | | <R:Random/> | |
| </D:prop> | | </D:prop> | |
| </D:propfind> | | </D:propfind> | |
|
| | | | |
| >>Response | | >>Response | |
| | | | |
| HTTP/1.1 207 Multi-Status | | HTTP/1.1 207 Multi-Status | |
|
| Content-Type: text/xml; charset="utf-8" | | Content-Type: application/xml; charset="utf-8" | |
| Content-Length: xxxx | | Content-Length: xxxx | |
| | | | |
| <?xml version="1.0" encoding="utf-8" ?> | | <?xml version="1.0" encoding="utf-8" ?> | |
| <D:multistatus xmlns:D="DAV:"> | | <D:multistatus xmlns:D="DAV:"> | |
| <D:response xmlns:R="http://www.example.com/boxschema/"> | | <D:response xmlns:R="http://www.example.com/boxschema/"> | |
| <D:href>http://www.example.com/file</D:href> | | <D:href>http://www.example.com/file</D:href> | |
| <D:propstat> | | <D:propstat> | |
| <D:prop> | | <D:prop> | |
| <R:bigbox> | | <R:bigbox> | |
| <R:BoxType>Box type A</R:BoxType> | | <R:BoxType>Box type A</R:BoxType> | |
| | | | |
| skipping to change at page 34, line 38 | | skipping to change at page 37, line 12 | |
| the request did not have sufficient access rights to see the third | | the request did not have sufficient access rights to see the third | |
| and fourth properties. | | and fourth properties. | |
| | | | |
| 8.2.4. Example - Retrieving Named and Dead Properties | | 8.2.4. Example - Retrieving Named and Dead Properties | |
| | | | |
| >>Request | | >>Request | |
| | | | |
| PROPFIND /mycol/ HTTP/1.1 | | PROPFIND /mycol/ HTTP/1.1 | |
| Host: www.example.com | | Host: www.example.com | |
| Depth: 1 | | Depth: 1 | |
|
| Content-type: text/xml; charset="utf-8" | | Content-type: application/xml; charset="utf-8" | |
| Content-Length: xxxx | | Content-Length: xxxx | |
| | | | |
| <?xml version="1.0" encoding="utf-8" ?> | | <?xml version="1.0" encoding="utf-8" ?> | |
| <D:propfind xmlns:D="DAV:"> | | <D:propfind xmlns:D="DAV:"> | |
| <D:prop> | | <D:prop> | |
| <D:creationdate/> | | <D:creationdate/> | |
| <D:getlastmodified/> | | <D:getlastmodified/> | |
| </D:prop> | | </D:prop> | |
| <D:dead-props/> | | <D:dead-props/> | |
| </D:propfind> | | </D:propfind> | |
| | | | |
| In this example, PROPFIND is executed on a collection resource | | In this example, PROPFIND is executed on a collection resource | |
| http://www.example.com/mycol/. The client requests the values of two | | http://www.example.com/mycol/. The client requests the values of two | |
| specific live properties plus all dead properties (names and values). | | specific live properties plus all dead properties (names and values). | |
| The response is not shown. | | The response is not shown. | |
| | | | |
|
| 8.2.5. Example - Using propname to Retrieve all Property Names | | 8.2.5. Example - Using 'propname' to Retrieve all Property Names | |
| | | | |
| >>Request | | >>Request | |
|
| | | | |
| PROPFIND /container/ HTTP/1.1 | | PROPFIND /container/ HTTP/1.1 | |
| Host: www.example.com | | Host: www.example.com | |
|
| Content-Type: text/xml; charset="utf-8" | | Content-Type: application/xml; charset="utf-8" | |
| Content-Length: xxxx | | Content-Length: xxxx | |
| | | | |
| <?xml version="1.0" encoding="utf-8" ?> | | <?xml version="1.0" encoding="utf-8" ?> | |
| <propfind xmlns="DAV:"> | | <propfind xmlns="DAV:"> | |
| <propname/> | | <propname/> | |
| </propfind> | | </propfind> | |
|
| | | | |
| >>Response | | >>Response | |
| | | | |
| HTTP/1.1 207 Multi-Status | | HTTP/1.1 207 Multi-Status | |
|
| Content-Type: text/xml; charset="utf-8" | | Content-Type: application/xml; charset="utf-8" | |
| Content-Length: xxxx | | Content-Length: xxxx | |
| | | | |
| <?xml version="1.0" encoding="utf-8" ?> | | <?xml version="1.0" encoding="utf-8" ?> | |
| <multistatus xmlns="DAV:"> | | <multistatus xmlns="DAV:"> | |
| <response> | | <response> | |
| <href>http://www.example.com/container/</href> | | <href>http://www.example.com/container/</href> | |
| <propstat> | | <propstat> | |
| <prop xmlns:R="http://www.example.com/boxschema/"> | | <prop xmlns:R="http://www.example.com/boxschema/"> | |
| <R:bigbox/> | | <R:bigbox/> | |
| <R:author/> | | <R:author/> | |
| | | | |
| skipping to change at page 36, line 40 | | skipping to change at page 39, line 24 | |
| creationdate, displayname, getcontentlength, getcontenttype, getetag, | | creationdate, displayname, getcontentlength, getcontenttype, getetag, | |
| getlastmodified, resourcetype, and supportedlock in the "DAV:" | | getlastmodified, resourcetype, and supportedlock in the "DAV:" | |
| namespace. | | namespace. | |
| | | | |
| This example also demonstrates the use of XML namespace scoping and | | This example also demonstrates the use of XML namespace scoping and | |
| the default namespace. Since the "xmlns" attribute does not contain | | the default namespace. Since the "xmlns" attribute does not contain | |
| a prefix, the namespace applies by default to all enclosed elements. | | a prefix, the namespace applies by default to all enclosed elements. | |
| Hence, all elements which do not explicitly state the namespace to | | Hence, all elements which do not explicitly state the namespace to | |
| which they belong are members of the "DAV:" namespace. | | which they belong are members of the "DAV:" namespace. | |
| | | | |
|
| | | 8.2.6. Example - Using 'allprop' | |
| | | | |
| | | Note that 'allprop', despite its name which remains for backward- | |
| | | compatibility, does not return every property, but only dead | |
| | | properties and the live properties defined in this specification. | |
| | | | |
| | | >>Request | |
| | | | |
| | | PROPFIND /container/ HTTP/1.1 | |
| | | Host: www.example.com | |
| | | Depth: 1 | |
| | | Content-Type: application/xml; charset="utf-8" | |
| | | Content-Length: xxxx | |
| | | | |
| | | <?xml version="1.0" encoding="utf-8" ?> | |
| | | <D:propfind xmlns:D="DAV:"> | |
| | | <D:allprop/> | |
| | | </D:propfind> | |
| | | | |
| | | >>Response | |
| | | | |
| | | HTTP/1.1 207 Multi-Status | |
| | | Content-Type: application/xml; charset="utf-8" | |
| | | Content-Length: xxxx | |
| | | | |
| | | <?xml version="1.0" encoding="utf-8" ?> | |
| | | <D:multistatus xmlns:D="DAV:"> | |
| | | <D:response> | |
| | | <D:href>/container/</D:href> | |
| | | <D:propstat> | |
| | | <D:prop xmlns:R="http://www.foo.bar/boxschema/"> | |
| | | <R:bigbox><R:BoxType>Box type A</R:BoxType></R:bigbox> | |
| | | <R:author><R:Name>Hadrian</R:Name></R:author> | |
| | | <D:creationdate>1997-12-01T17:42:21-08:00</D:creationdate> | |
| | | <D:displayname>Example collection</D:displayname> | |
| | | <D:resourcetype><D:collection/></D:resourcetype> | |
| | | <D:supportedlock> | |
| | | <D:lockentry> | |
| | | <D:lockscope><D:exclusive/></D:lockscope> | |
| | | <D:locktype><D:write/></D:locktype> | |
| | | </D:lockentry> | |
| | | <D:lockentry> | |
| | | <D:lockscope><D:shared/></D:lockscope> | |
| | | <D:locktype><D:write/></D:locktype> | |
| | | </D:lockentry> | |
| | | </D:supportedlock> | |
| | | </D:prop> | |
| | | <D:status>HTTP/1.1 200 OK</D:status> | |
| | | </D:propstat> | |
| | | </D:response> | |
| | | <D:response> | |
| | | <D:href>/container/front.html</D:href> | |
| | | <D:propstat> | |
| | | <D:prop xmlns:R="http://www.foo.bar/boxschema/"> | |
| | | <R:bigbox><R:BoxType>Box type B</R:BoxType> | |
| | | </R:bigbox> | |
| | | <D:creationdate>1997-12-01T18:27:21-08:00</D:creationdate> | |
| | | <D:displayname>Example HTML resource</D:displayname> | |
| | | <D:getcontentlength>4525</D:getcontentlength> | |
| | | <D:getcontenttype>text/html</D:getcontenttype> | |
| | | <D:getetag>zzyzx</D:getetag> | |
| | | <D:getlastmodified | |
| | | >Monday, 12-Jan-98 09:25:56 GMT</D:getlastmodified> | |
| | | <D:resourcetype/> | |
| | | <D:supportedlock> | |
| | | <D:lockentry> | |
| | | <D:lockscope><D:exclusive/></D:lockscope> | |
| | | <D:locktype><D:write/></D:locktype> | |
| | | </D:lockentry> | |
| | | <D:lockentry> | |
| | | <D:lockscope><D:shared/></D:lockscope> | |
| | | <D:locktype><D:write/></D:locktype> | |
| | | </D:lockentry> | |
| | | </D:supportedlock> | |
| | | </D:prop> | |
| | | <D:status>HTTP/1.1 200 OK</D:status> | |
| | | </D:propstat> | |
| | | </D:response> | |
| | | </D:multistatus> | |
| | | | |
| | | In this example, PROPFIND was invoked on the resource | |
| | | http://www.foo.bar/container/ with a Depth header of 1, meaning the | |
| | | request applies to the resource and its children, and a propfind XML | |
| | | element containing the allprop XML element, meaning the request | |
| | | should return the name and value of all the dead properties defined | |
| | | on the resources, plus the name and value of all the properties | |
| | | defined in this specification. This example illustrates the use of | |
| | | relative references in the 'href' elements of the response. | |
| | | | |
| | | The resource http://www.foo.bar/container/ has six properties defined | |
| | | on it: 'bigbox' and 'author in the "http://www.foo.bar/boxschema/" | |
| | | namespace, DAV:creationdate, DAV:displayname, DAV:resourcetype, and | |
| | | DAV:supportedlock. | |
| | | | |
| | | The last four properties are WebDAV-specific, defined in Section 14. | |
| | | Since GET is not supported on this resource, the get* properties | |
| | | (e.g., DAV:getcontentlength) are not defined on this resource. The | |
| | | WebDAV-specific properties assert that "container" was created on | |
| | | December 1, 1997, at 5:42:21PM, in a time zone 8 hours west of GMT | |
| | | (DAV:creationdate), has a name of "Example collection" (DAV: | |
| | | displayname), a collection resource type (DAV:resourcetype), and | |
| | | supports exclusive write and shared write locks (DAV:supportedlock). | |
| | | | |
| | | The resource http://www.foo.bar/container/front.html has nine | |
| | | properties defined on it: | |
| | | | |
| | | 'bigbox' in the "http://www.foo.bar/boxschema/" namespace (another | |
| | | instance of the "bigbox" property type), DAV:creationdate, DAV: | |
| | | displayname, DAV:getcontentlength, DAV:getcontenttype, DAV:getetag, | |
| | | DAV:getlastmodified, DAV:resourcetype, and DAV:supportedlock. | |
| | | | |
| | | The DAV-specific properties assert that "front.html" was created on | |
| | | December 1, 1997, at 6:27:21PM, in a time zone 8 hours west of GMT | |
| | | (DAV:creationdate), has a name of "Example HTML resource" (DAV: | |
| | | displayname), a content length of 4525 bytes (DAV:getcontentlength), | |
| | | a MIME type of "text/html" (DAV:getcontenttype), an entity tag of | |
| | | "zzyzx" (DAV:getetag), was last modified on Monday, January 12, 1998, | |
| | | at 09:25:56 GMT (DAV:getlastmodified), has an empty resource type, | |
| | | meaning that it is not a collection (DAV:resourcetype), and supports | |
| | | both exclusive write and shared write locks (DAV:supportedlock). | |
| | | | |
| 8.3. PROPPATCH | | 8.3. PROPPATCH | |
| | | | |
| The PROPPATCH method processes instructions specified in the request | | The PROPPATCH method processes instructions specified in the request | |
| body to set and/or remove properties defined on the resource | | body to set and/or remove properties defined on the resource | |
| identified by the Request-URI. | | identified by the Request-URI. | |
| | | | |
| All DAV compliant resources MUST support the PROPPATCH method and | | All DAV compliant resources MUST support the PROPPATCH method and | |
| MUST process instructions that are specified using the | | MUST process instructions that are specified using the | |
| propertyupdate, set, and remove XML elements. Execution of the | | propertyupdate, set, and remove XML elements. Execution of the | |
| directives in this method is, of course, subject to access control | | directives in this method is, of course, subject to access control | |
| constraints. DAV compliant resources SHOULD support the setting of | | constraints. DAV compliant resources SHOULD support the setting of | |
| arbitrary dead properties. | | arbitrary dead properties. | |
| | | | |
| The request message body of a PROPPATCH method MUST contain the | | The request message body of a PROPPATCH method MUST contain the | |
| propertyupdate XML element. Instruction processing MUST occur in | | propertyupdate XML element. Instruction processing MUST occur in | |
| document order (an exception to the normal rule that ordering is | | document order (an exception to the normal rule that ordering is | |
| irrelevant). Instructions MUST either all be executed or none | | irrelevant). Instructions MUST either all be executed or none | |
| executed. Thus if any error occurs during processing all executed | | executed. Thus if any error occurs during processing all executed | |
| instructions MUST be undone and a proper error result returned. | | instructions MUST be undone and a proper error result returned. | |
| Instruction processing details can be found in the definition of the | | Instruction processing details can be found in the definition of the | |
|
| set and remove instructions in sections 13.23 and section 13.24. | | set and remove instructions in Section 13.23 and Section 13.26. | |
| | | | |
|
| 8.3.1. Status Codes for use with 207 (Multi-Status) | | 8.3.1. Status Codes for use in 207 (Multi-Status) | |
| | | | |
| The following are examples of response codes one would expect to be | | The following are examples of response codes one would expect to be | |
| used in a 207 (Multi-Status) response for this method. Note, | | used in a 207 (Multi-Status) response for this method. Note, | |
| however, that unless explicitly prohibited any 2/3/4/5xx series | | however, that unless explicitly prohibited any 2/3/4/5xx series | |
| response code may be used in a 207 (Multi-Status) response. | | response code may be used in a 207 (Multi-Status) response. | |
| | | | |
|
| 200 (OK) - The command succeeded. As there can be a mixture of sets | | 200 (OK) - The property set or change succeeded. Note that if this | |
| and removes in a body, a 201 (Created) seems inappropriate. | | appears for one property, it appears for every property in the | |
| | | response, due to the atomicity of PROPPATCH. | |
| | | | |
| 403 (Forbidden) - The client, for reasons the server chooses not to | | 403 (Forbidden) - The client, for reasons the server chooses not to | |
| specify, cannot alter one of the properties. | | specify, cannot alter one of the properties. | |
| | | | |
| 403 (Forbidden): The client has attempted to set a read- only | | 403 (Forbidden): The client has attempted to set a read- only | |
|
| property, such as getetag. If returning this error, the server | | property, such as DAV:getetag. If returning this error, the server | |
| SHOULD use 'read-only-property' inside the response body. | | SHOULD use the precondition code 'writable-property' inside the | |
| | | response body. | |
| | | | |
| 409 (Conflict) - The client has provided a value whose semantics are | | 409 (Conflict) - The client has provided a value whose semantics are | |
| not appropriate for the property. | | not appropriate for the property. | |
| | | | |
|
| 423 (Locked) - The specified resource is locked and the client either | | | |
| is not a lock owner or the lock type requires a lock token to be | | | |
| submitted and the client did not submit it. This response SHOULD | | | |
| contain the 'missing-lock-token' precondition element. | | | |
| | | | |
| 424 (Failed Dependency) - The property change could not be made | | 424 (Failed Dependency) - The property change could not be made | |
| because of another property change that failed. | | because of another property change that failed. | |
| | | | |
| 507 (Insufficient Storage) - The server did not have sufficient space | | 507 (Insufficient Storage) - The server did not have sufficient space | |
| to record the property. | | to record the property. | |
| | | | |
| 8.3.2. Example - PROPPATCH | | 8.3.2. Example - PROPPATCH | |
| | | | |
| >>Request | | >>Request | |
| | | | |
| PROPPATCH /bar.html HTTP/1.1 | | PROPPATCH /bar.html HTTP/1.1 | |
| Host: www.example.com | | Host: www.example.com | |
|
| Content-Type: text/xml; charset="utf-8" | | Content-Type: application/xml; charset="utf-8" | |
| Content-Length: xxxx | | Content-Length: xxxx | |
| | | | |
| <?xml version="1.0" encoding="utf-8" ?> | | <?xml version="1.0" encoding="utf-8" ?> | |
| <D:propertyupdate xmlns:D="DAV:" | | <D:propertyupdate xmlns:D="DAV:" | |
| xmlns:Z="http://www.w3.com/standards/z39.50/"> | | xmlns:Z="http://www.w3.com/standards/z39.50/"> | |
| <D:set> | | <D:set> | |
| <D:prop> | | <D:prop> | |
| <Z:authors> | | <Z:authors> | |
| <Z:Author>Jim Whitehead</Z:Author> | | <Z:Author>Jim Whitehead</Z:Author> | |
| <Z:Author>Roy Fielding</Z:Author> | | <Z:Author>Roy Fielding</Z:Author> | |
| | | | |
| skipping to change at page 38, line 29 | | skipping to change at page 44, line 4 | |
| <Z:authors> | | <Z:authors> | |
| <Z:Author>Jim Whitehead</Z:Author> | | <Z:Author>Jim Whitehead</Z:Author> | |
| <Z:Author>Roy Fielding</Z:Author> | | <Z:Author>Roy Fielding</Z:Author> | |
| </Z:authors> | | </Z:authors> | |
| </D:prop> | | </D:prop> | |
| </D:set> | | </D:set> | |
| <D:remove> | | <D:remove> | |
| <D:prop><Z:Copyright-Owner/></D:prop> | | <D:prop><Z:Copyright-Owner/></D:prop> | |
| </D:remove> | | </D:remove> | |
| </D:propertyupdate> | | </D:propertyupdate> | |
|
| | | | |
| >>Response | | >>Response | |
| | | | |
| HTTP/1.1 207 Multi-Status | | HTTP/1.1 207 Multi-Status | |
|
| Content-Type: text/xml; charset="utf-8" | | Content-Type: application/xml; charset="utf-8" | |
| Content-Length: xxxx | | Content-Length: xxxx | |
| | | | |
| <?xml version="1.0" encoding="utf-8" ?> | | <?xml version="1.0" encoding="utf-8" ?> | |
| <D:multistatus xmlns:D="DAV:" | | <D:multistatus xmlns:D="DAV:" | |
| xmlns:Z="http://www.w3.com/standards/z39.50"> | | xmlns:Z="http://www.w3.com/standards/z39.50"> | |
| <D:response> | | <D:response> | |
| <D:href>http://www.example.com/bar.html</D:href> | | <D:href>http://www.example.com/bar.html</D:href> | |
| <D:propstat> | | <D:propstat> | |
| <D:prop><Z:Authors/></D:prop> | | <D:prop><Z:Authors/></D:prop> | |
| <D:status>HTTP/1.1 424 Failed Dependency</D:status> | | <D:status>HTTP/1.1 424 Failed Dependency</D:status> | |
| | | | |
| skipping to change at page 39, line 19 | | skipping to change at page 44, line 43 | |
| modifications occur. The 424 (Failed Dependency) status code for the | | modifications occur. The 424 (Failed Dependency) status code for the | |
| Authors property indicates this action would have succeeded if it | | Authors property indicates this action would have succeeded if it | |
| were not for the conflict with removing the Copyright-Owner property. | | were not for the conflict with removing the Copyright-Owner property. | |
| | | | |
| 8.4. MKCOL Method | | 8.4. MKCOL Method | |
| | | | |
| The MKCOL method is used to create a new collection. All WebDAV | | The MKCOL method is used to create a new collection. All WebDAV | |
| compliant resources MUST support the MKCOL method. | | compliant resources MUST support the MKCOL method. | |
| | | | |
| MKCOL creates a new collection resource at the location specified by | | MKCOL creates a new collection resource at the location specified by | |
|
| the Request-URI. If the resource identified by the Request-URI is | | the Request-URI. If the Request-URI is already mapped to a resource | |
| non-null then the MKCOL MUST fail. During MKCOL processing, a server | | then the MKCOL MUST fail. During MKCOL processing, a server MUST | |
| MUST make the Request-URI a member of its parent collection, unless | | make the Request-URI a member of its parent collection, unless the | |
| the Request-URI is "/". If no such ancestor exists, the method MUST | | Request-URI is "/". If no such ancestor exists, the method MUST | |
| fail. When the MKCOL operation creates a new collection resource, | | fail. When the MKCOL operation creates a new collection resource, | |
| all ancestors MUST already exist, or the method MUST fail with a 409 | | all ancestors MUST already exist, or the method MUST fail with a 409 | |
| (Conflict) status code. For example, if a request to create | | (Conflict) status code. For example, if a request to create | |
| collection /a/b/c/d/ is made, and /a/b/c/ does not exist, the request | | collection /a/b/c/d/ is made, and /a/b/c/ does not exist, the request | |
| must fail. | | must fail. | |
| | | | |
| When MKCOL is invoked without a request body, the newly created | | When MKCOL is invoked without a request body, the newly created | |
| collection SHOULD have no members. | | collection SHOULD have no members. | |
| | | | |
| A MKCOL request message may contain a message body. The precise | | A MKCOL request message may contain a message body. The precise | |
| | | | |
| skipping to change at page 39, line 45 | | skipping to change at page 45, line 21 | |
| of members and properties on the collections or members. If the | | of members and properties on the collections or members. If the | |
| server receives a MKCOL request entity type it does not support or | | server receives a MKCOL request entity type it does not support or | |
| understand it MUST respond with a 415 (Unsupported Media Type) status | | understand it MUST respond with a 415 (Unsupported Media Type) status | |
| code. If the server decides to reject the request based on the | | code. If the server decides to reject the request based on the | |
| presence of an entity or the type of an entity, it should use the 415 | | presence of an entity or the type of an entity, it should use the 415 | |
| (Unsupported Media Type) status code. | | (Unsupported Media Type) status code. | |
| | | | |
| 8.4.1. MKCOL Status Codes | | 8.4.1. MKCOL Status Codes | |
| | | | |
| Responses from a MKCOL request MUST NOT be cached as MKCOL has non- | | Responses from a MKCOL request MUST NOT be cached as MKCOL has non- | |
|
| idempotent semantics. | | idempotent semantics. In addition to the general status codes | |
| | | possible, the following status codes have specific applicability to | |
| | | MKCOL: | |
| | | | |
| 201 (Created) - The collection was created. | | 201 (Created) - The collection was created. | |
| | | | |
| 403 (Forbidden) - This indicates at least one of two conditions: 1) | | 403 (Forbidden) - This indicates at least one of two conditions: 1) | |
| the server does not allow the creation of collections at the given | | the server does not allow the creation of collections at the given | |
|
| location in its namespace, or 2) the parent collection of the | | location in its URL namespace, or 2) the parent collection of the | |
| Request-URI exists but cannot accept members. | | Request-URI exists but cannot accept members. | |
| | | | |
| 405 (Method Not Allowed) - MKCOL can only be executed on an unmapped | | 405 (Method Not Allowed) - MKCOL can only be executed on an unmapped | |
| URL. | | URL. | |
| | | | |
| 409 (Conflict) - A collection cannot be made at the Request-URI until | | 409 (Conflict) - A collection cannot be made at the Request-URI until | |
| one or more intermediate collections have been created. The server | | one or more intermediate collections have been created. The server | |
| MUST NOT create those intermediate collections automatically. | | MUST NOT create those intermediate collections automatically. | |
| | | | |
| 415 (Unsupported Media Type) - The server does not support the | | 415 (Unsupported Media Type) - The server does not support the | |
|
| request type of the body. | | request body type (since this specification does not define any body | |
| | | for MKCOL requests). | |
| | | | |
| 507 (Insufficient Storage) - The resource does not have sufficient | | 507 (Insufficient Storage) - The resource does not have sufficient | |
| space to record the state of the resource after the execution of this | | space to record the state of the resource after the execution of this | |
| method. | | method. | |
| | | | |
| 8.4.2. Example - MKCOL | | 8.4.2. Example - MKCOL | |
| | | | |
| This example creates a collection called /webdisc/xfiles/ on the | | This example creates a collection called /webdisc/xfiles/ on the | |
| server www.example.com. | | server www.example.com. | |
| | | | |
| | | | |
| skipping to change at page 41, line 15 | | skipping to change at page 46, line 39 | |
| 8.6. POST for Collections | | 8.6. POST for Collections | |
| | | | |
| Since by definition the actual function performed by POST is | | Since by definition the actual function performed by POST is | |
| determined by the server and often depends on the particular | | determined by the server and often depends on the particular | |
| resource, the behavior of POST when applied to collections cannot be | | resource, the behavior of POST when applied to collections cannot be | |
| meaningfully modified because it is largely undefined. Thus the | | meaningfully modified because it is largely undefined. Thus the | |
| semantics of POST are unmodified when applied to a collection. | | semantics of POST are unmodified when applied to a collection. | |
| | | | |
| 8.7. DELETE | | 8.7. DELETE | |
| | | | |
|
| Locks rooted on a resource MUST be destroyed in a successful DELETE | | DELETE is defined in [RFC2616], section 9.7, to "delete the resource | |
| of that resource. | | identified by the Request-URI". However, WebDAV changes some DELETE | |
| | | handling requirements. | |
| | | | |
|
| 8.7.1. DELETE for Non-Collection Resources | | A server processing a successful DELETE request: | |
| | | | |
|
| When a client issues a DELETE request to a Request-URI mapping to a | | MUST destroy locks rooted on the deleted resource | |
| non-collection resource, if the operation is successful the server | | | |
| MUST remove that mapping. Thus, after a successful DELETE operation | | | |
| (and in the absence of other actions) a subsequent GET/HEAD/PROPFIND | | | |
| request to the target Request-URI MUST return 404 (Not Found). | | | |
| | | | |
|
| 8.7.2. DELETE for Collections | | MUST remove the mapping from the Request-URI to any resource. | |
| | | | |
| | | Thus, after a successful DELETE operation (and in the absence of | |
| | | other actions) a subsequent GET/HEAD/PROPFIND request to the target | |
| | | Request-URI MUST return 404 (Not Found). | |
| | | | |
| | | 8.7.1. DELETE for Collections | |
| | | | |
| The DELETE method on a collection MUST act as if a "Depth: infinity" | | The DELETE method on a collection MUST act as if a "Depth: infinity" | |
| header was used on it. A client MUST NOT submit a Depth header with | | header was used on it. A client MUST NOT submit a Depth header with | |
| a DELETE on a collection with any value but infinity. | | a DELETE on a collection with any value but infinity. | |
| | | | |
| DELETE instructs that the collection specified in the Request-URI and | | DELETE instructs that the collection specified in the Request-URI and | |
| all resources identified by its internal member URLs are to be | | all resources identified by its internal member URLs are to be | |
| deleted. | | deleted. | |
| | | | |
| If any resource identified by a member URL cannot be deleted then all | | If any resource identified by a member URL cannot be deleted then all | |
|
| of the member's ancestors MUST NOT be deleted, so as to maintain | | of the member's ancestors MUST NOT be deleted, so as to maintain URL | |
| namespace consistency. | | namespace consistency. | |
| | | | |
| Any headers included with DELETE MUST be applied in processing every | | Any headers included with DELETE MUST be applied in processing every | |
| resource to be deleted. | | resource to be deleted. | |
| | | | |
| When the DELETE method has completed processing it MUST result in a | | When the DELETE method has completed processing it MUST result in a | |
|
| consistent namespace. | | consistent URL namespace. | |
| | | | |
| If an error occurs deleting an internal resource (a resource other | | If an error occurs deleting an internal resource (a resource other | |
| than the resource identified in the Request-URI) then the response | | than the resource identified in the Request-URI) then the response | |
| can be a 207 (Multi-Status). Multi-Status is used here to indicate | | can be a 207 (Multi-Status). Multi-Status is used here to indicate | |
| which internal resources could NOT be deleted, including an error | | which internal resources could NOT be deleted, including an error | |
| code which should help the client understand which resources caused | | code which should help the client understand which resources caused | |
| the failure. For example, the Multi-Status body could include a | | the failure. For example, the Multi-Status body could include a | |
| response with status 423 (Locked) if an internal resource was locked. | | response with status 423 (Locked) if an internal resource was locked. | |
| | | | |
| The server MAY return a 4xx status response, rather than a Multi- | | The server MAY return a 4xx status response, rather than a Multi- | |
| Status, if the request failed. | | Status, if the request failed. | |
| | | | |
|
| 424 (Failed Dependency) errors SHOULD NOT be in the 207 (Multi- | | 424 (Failed Dependency) status codes SHOULD NOT be in the 207 (Multi- | |
| Status) response for DELETE. They can be safely left out because the | | Status) response for DELETE. They can be safely left out because the | |
| client will know that the ancestors of a resource could not be | | client will know that the ancestors of a resource could not be | |
| deleted when the client receives an error for the ancestor's progeny. | | deleted when the client receives an error for the ancestor's progeny. | |
| Additionally 204 (No Content) errors SHOULD NOT be returned in the | | Additionally 204 (No Content) errors SHOULD NOT be returned in the | |
| 207 (Multi- Status). The reason for this prohibition is that 204 (No | | 207 (Multi- Status). The reason for this prohibition is that 204 (No | |
| Content) is the default success code. | | Content) is the default success code. | |
| | | | |
|
| 8.7.3. Example - DELETE | | 8.7.2. Example - DELETE | |
| | | | |
| >>Request | | >>Request | |
| | | | |
| DELETE /container/ HTTP/1.1 | | DELETE /container/ HTTP/1.1 | |
| Host: www.example.com | | Host: www.example.com | |
|
| | | | |
| >>Response | | >>Response | |
| | | | |
| HTTP/1.1 207 Multi-Status | | HTTP/1.1 207 Multi-Status | |
|
| Content-Type: text/xml; charset="utf-8" | | Content-Type: application/xml; charset="utf-8" | |
| Content-Length: xxxx | | Content-Length: xxxx | |
| | | | |
| <?xml version="1.0" encoding="utf-8" ?> | | <?xml version="1.0" encoding="utf-8" ?> | |
| <d:multistatus xmlns:d="DAV:"> | | <d:multistatus xmlns:d="DAV:"> | |
| <d:response> | | <d:response> | |
| <d:href>http://www.example.com/container/resource3</d:href> | | <d:href>http://www.example.com/container/resource3</d:href> | |
| <d:status>HTTP/1.1 423 Locked</d:status> | | <d:status>HTTP/1.1 423 Locked</d:status> | |
| </d:response> | | </d:response> | |
| </d:multistatus> | | </d:multistatus> | |
| | | | |
| | | | |
| skipping to change at page 43, line 16 | | skipping to change at page 48, line 45 | |
| example, if a server recognizes the content type of the request body, | | example, if a server recognizes the content type of the request body, | |
| it may be able to automatically extract information that could be | | it may be able to automatically extract information that could be | |
| profitably exposed as properties. | | profitably exposed as properties. | |
| | | | |
| A PUT that would result in the creation of a resource without an | | A PUT that would result in the creation of a resource without an | |
| appropriately scoped parent collection MUST fail with a 409 | | appropriately scoped parent collection MUST fail with a 409 | |
| (Conflict). | | (Conflict). | |
| | | | |
| 8.8.2. PUT for Collections | | 8.8.2. PUT for Collections | |
| | | | |
|
| As defined in RFC2616 [6], the "PUT method requests that the enclosed | | This specification does not define the behavior of the PUT method for | |
| entity be stored under the supplied Request-URI." Since submission | | existing collections. A PUT request to an existing collection MAY be | |
| of an entity representing a collection would implicitly encode | | treated as an error (405 Method Not Allowed). | |
| creation and deletion of resources, this specification intentionally | | | |
| does not define a transmission format for creating a collection using | | The MKCOL method is defined to create collections. | |
| PUT. Instead, the MKCOL method is defined to create collections. A | | | |
| PUT request to an existing collection MAY be treated as an error (405 | | | |
| Method Not Allowed). | | | |
| | | | |
| 8.9. COPY | | 8.9. COPY | |
| | | | |
| The COPY method creates a duplicate of the source resource identified | | The COPY method creates a duplicate of the source resource identified | |
| by the Request-URI, in the destination resource identified by the URI | | by the Request-URI, in the destination resource identified by the URI | |
| in the Destination header. The Destination header MUST be present. | | in the Destination header. The Destination header MUST be present. | |
| The exact behavior of the COPY method depends on the type of the | | The exact behavior of the COPY method depends on the type of the | |
| source resource. The state of the resource to be copied is fixed at | | source resource. The state of the resource to be copied is fixed at | |
| the point the server begins processing the COPY request. | | the point the server begins processing the COPY request. | |
| | | | |
| | | | |
| skipping to change at page 44, line 13 | | skipping to change at page 49, line 41 | |
| Subsequent alterations to the source resource will not modify the | | Subsequent alterations to the source resource will not modify the | |
| destination resource. | | destination resource. | |
| | | | |
| 8.9.2. COPY for Properties | | 8.9.2. COPY for Properties | |
| | | | |
| After a successful COPY invocation, all dead properties on the source | | After a successful COPY invocation, all dead properties on the source | |
| resource MUST be duplicated on the destination resource, along with | | resource MUST be duplicated on the destination resource, along with | |
| all properties as appropriate. Live properties described in this | | all properties as appropriate. Live properties described in this | |
| document SHOULD be duplicated as identically behaving live properties | | document SHOULD be duplicated as identically behaving live properties | |
| at the destination resource, but not necessarily with the same | | at the destination resource, but not necessarily with the same | |
|
| values. If a property cannot be copied live, then its value MUST be | | values. Servers SHOULD NOT convert live properties into dead | |
| duplicated, octet-for-octet, in an identically named, dead property | | properties on the destination resource, because clients may then draw | |
| on the destination resource. | | incorrect conclusions about the state or functionality of a resource. | |
| | | Note that some live properties are defined such that the absence of | |
| | | the property has a specific meaning (e.g. a flag with one meaning if | |
| | | present and the opposite if absent), and in these cases, a successful | |
| | | COPY might result in the property being reported as "Not Found" in | |
| | | subsequent requests. | |
| | | | |
| A COPY operation creates a new resource, much like a PUT operation | | A COPY operation creates a new resource, much like a PUT operation | |
| does. Live properties which are related to resource creation (such | | does. Live properties which are related to resource creation (such | |
|
| as creationdate) should have their values set accordingly. | | as DAV:creationdate) should have their values set accordingly. | |
| | | | |
| 8.9.3. COPY for Collections | | 8.9.3. COPY for Collections | |
| | | | |
| The COPY method on a collection without a Depth header MUST act as if | | The COPY method on a collection without a Depth header MUST act as if | |
| a Depth header with value "infinity" was included. A client may | | a Depth header with value "infinity" was included. A client may | |
| submit a Depth header on a COPY on a collection with a value of "0" | | submit a Depth header on a COPY on a collection with a value of "0" | |
| or "infinity". Servers MUST support the "0" and "infinity" Depth | | or "infinity". Servers MUST support the "0" and "infinity" Depth | |
| header behaviors on WebDAV-compliant resources. | | header behaviors on WebDAV-compliant resources. | |
| | | | |
| A COPY of depth infinity instructs that the collection resource | | A COPY of depth infinity instructs that the collection resource | |
| identified by the Request-URI is to be copied to the location | | identified by the Request-URI is to be copied to the location | |
| identified by the URI in the Destination header, and all its internal | | identified by the URI in the Destination header, and all its internal | |
| member resources are to be copied to a location relative to it, | | member resources are to be copied to a location relative to it, | |
|
| recursively through all levels of the collection hierarchy. Servers | | recursively through all levels of the collection hierarchy. | |
| should of course avoid infinite recursion, and can do so by copying | | | |
| the source resource as it existed at the point where processing | | | |
| started. | | | |
| | | | |
| A COPY of "Depth: 0" only instructs that the collection and its | | A COPY of "Depth: 0" only instructs that the collection and its | |
| properties but not resources identified by its internal member URLs, | | properties but not resources identified by its internal member URLs, | |
| are to be copied. | | are to be copied. | |
| | | | |
| Any headers included with a COPY MUST be applied in processing every | | Any headers included with a COPY MUST be applied in processing every | |
| resource to be copied with the exception of the Destination header. | | resource to be copied with the exception of the Destination header. | |
| | | | |
| The Destination header only specifies the destination URI for the | | The Destination header only specifies the destination URI for the | |
| Request-URI. When applied to members of the collection identified by | | Request-URI. When applied to members of the collection identified by | |
| the Request-URI the value of Destination is to be modified to reflect | | the Request-URI the value of Destination is to be modified to reflect | |
| the current location in the hierarchy. So, if the Request-URI is /a/ | | the current location in the hierarchy. So, if the Request-URI is /a/ | |
| with Host header value http://example.com/ and the Destination is | | with Host header value http://example.com/ and the Destination is | |
| http://example.com/b/ then when http://example.com/a/c/d is processed | | http://example.com/b/ then when http://example.com/a/c/d is processed | |
| it must use a Destination of http://example.com/b/c/d. | | it must use a Destination of http://example.com/b/c/d. | |
| | | | |
| When the COPY method has completed processing it MUST have created a | | When the COPY method has completed processing it MUST have created a | |
|
| consistent namespace at the destination (see Section 8.7.2for the | | consistent URL namespace at the destination (see Section 5.1 for the | |
| definition of namespace consistency). However, if an error occurs | | definition of namespace consistency). However, if an error occurs | |
| while copying an internal collection, the server MUST NOT copy any | | while copying an internal collection, the server MUST NOT copy any | |
| resources identified by members of this collection (i.e., the server | | resources identified by members of this collection (i.e., the server | |
| must skip this subtree), as this would create an inconsistent | | must skip this subtree), as this would create an inconsistent | |
| namespace. After detecting an error, the COPY operation SHOULD try | | namespace. After detecting an error, the COPY operation SHOULD try | |
| to finish as much of the original copy operation as possible (i.e., | | to finish as much of the original copy operation as possible (i.e., | |
| the server should still attempt to copy other subtrees and their | | the server should still attempt to copy other subtrees and their | |
| members, that are not descendents of an error-causing collection). | | members, that are not descendents of an error-causing collection). | |
| | | | |
| So, for example, if an infinite depth copy operation is performed on | | So, for example, if an infinite depth copy operation is performed on | |
| | | | |
| skipping to change at page 45, line 38 | | skipping to change at page 51, line 19 | |
| | | | |
| The 424 (Failed Dependency) status code SHOULD NOT be returned in the | | The 424 (Failed Dependency) status code SHOULD NOT be returned in the | |
| 207 (Multi-Status) response from a COPY method. These responses can | | 207 (Multi-Status) response from a COPY method. These responses can | |
| be safely omitted because the client will know that the progeny of a | | be safely omitted because the client will know that the progeny of a | |
| resource could not be copied when the client receives an error for | | resource could not be copied when the client receives an error for | |
| the parent. Additionally 201 (Created)/204 (No Content) status codes | | the parent. Additionally 201 (Created)/204 (No Content) status codes | |
| SHOULD NOT be returned as values in 207 (Multi-Status) responses from | | SHOULD NOT be returned as values in 207 (Multi-Status) responses from | |
| COPY methods. They, too, can be safely omitted because they are the | | COPY methods. They, too, can be safely omitted because they are the | |
| default success codes. | | default success codes. | |
| | | | |
|
| 8.9.4. COPY and the Overwrite Header | | 8.9.4. COPY and Overwriting Destination Resources | |
| | | | |
|
| If a resource exists at the destination and the Overwrite header is | | If a COPY request has an Overwrite header with a value of "F", and a | |
| "T" then prior to performing the copy the server MUST perform a | | resource exists at the Destination URL, the server MUST fail the | |
| DELETE with "Depth: infinity" on the destination resource. If the | | request. | |
| Overwrite header is set to "F" then the operation will fail. | | | |
| (Extensions to WebDAV might not follow this rule to the letter but | | | |
| must consider backwards compatibility with clients that expect COPY | | | |
| to work this way.) | | | |
| | | | |
|
| Interoperability testing has shown that some clients expect a | | When a server executes a COPY request and overwrites a destination | |
| collection COPY to actually do a merge if a destination collection | | resource, the exact behavior MAY depend on many factors, including | |
| exists. That behavior is appropriate for file system folders but not | | WebDAV extension capabilities (see particularly [RFC3253]). Some | |
| necessarily for other data objects modelled as collections. Thus, | | considerations: | |
| implementors are urged to comply with the standard language above, | | | |
| and leave clients to perform a manual merge if that's the expected | | When an ordinary resource is overwritten, the server could delete | |
| behavior when copying a collection over another collection. | | the target resource before doing the copy, or could do an in-place | |
| | | overwrite to preserve live properties. | |
| | | | |
| | | When a collection is overwritten, the source collection membership | |
| | | could completely replace the destination collection membership, or | |
| | | the source collection membership could be combined with the | |
| | | destination collection membership. | |
| | | | |
| | | In general, if clients require the state of the destination URL to be | |
| | | wiped out prior to a COPY (e.g. to force live properties to be reset | |
| | | or to force collection membership to be reset), then the client could | |
| | | send a DELETE to the destination before the COPY request to ensure | |
| | | this reset. | |
| | | | |
| 8.9.5. Status Codes | | 8.9.5. Status Codes | |
| | | | |
|
| | | In addition to the general status codes possible, the following | |
| | | status codes have specific applicability to COPY: | |
| | | | |
| 201 (Created) - The source resource was successfully copied. The | | 201 (Created) - The source resource was successfully copied. The | |
|
| copy operation resulted in the creation of a new resource. | | COPY operation resulted in the creation of a new resource. | |
| | | | |
| 204 (No Content) - The source resource was successfully copied to a | | 204 (No Content) - The source resource was successfully copied to a | |
| pre-existing destination resource. | | pre-existing destination resource. | |
| | | | |
| 207 (Multi-Status) - Multiple resources were to be affected by the | | 207 (Multi-Status) - Multiple resources were to be affected by the | |
| COPY, but errors on some of them prevented the operation from taking | | COPY, but errors on some of them prevented the operation from taking | |
| place. Specific error messages, together with the most appropriate | | place. Specific error messages, together with the most appropriate | |
| of the source and destination URLs, appear in the body of the multi- | | of the source and destination URLs, appear in the body of the multi- | |
| status response. E.g. if a destination resource was locked and could | | status response. E.g. if a destination resource was locked and could | |
| not be overwritten, then the destination resource URL appears with | | not be overwritten, then the destination resource URL appears with | |
| the 423 (Locked) status. | | the 423 (Locked) status. | |
| | | | |
|
| 403 (Forbidden) - The operation is forbidden. Possibly this is | | 403 (Forbidden) - The operation is forbidden. A special case for | |
| because the source and destination resources are the same resource. | | COPY could be that the source and destination resources are the same | |
| | | resource. | |
| | | | |
| 409 (Conflict) - A resource cannot be created at the destination | | 409 (Conflict) - A resource cannot be created at the destination | |
| until one or more intermediate collections have been created. The | | until one or more intermediate collections have been created. The | |
| server MUST NOT create those intermediate collections automatically. | | server MUST NOT create those intermediate collections automatically. | |
| | | | |
|
| 412 (Precondition Failed) - A precondition failed, e.g. the Overwrite | | 412 (Precondition Failed) - A precondition header check failed, e.g. | |
| header is "F" and the state of the destination resource is non-null. | | the Overwrite header is "F" and the destination URL is already mapped | |
| | | to a resource. | |
| | | | |
| 423 (Locked) - The destination resource, or resource within the | | 423 (Locked) - The destination resource, or resource within the | |
| destination collection, was locked. This response SHOULD contain the | | destination collection, was locked. This response SHOULD contain the | |
|
| 'missing-lock-token' precondition element. | | 'lock-token-present' precondition element. | |
| | | | |
| 502 (Bad Gateway) - This may occur when the destination is on another | | 502 (Bad Gateway) - This may occur when the destination is on another | |
|
| server, repository or namespace. Either the source namespace does | | server, repository or URL namespace. Either the source namespace | |
| not support copying to the destination namespace, or the destination | | does not support copying to the destination namespace, or the | |
| namespace refuses to accept the resource. The client may wish to try | | destination namespace refuses to accept the resource. The client may | |
| GET/PUT and PROPFIND/PROPPATCH instead. | | wish to try GET/PUT and PROPFIND/PROPPATCH instead. | |
| | | | |
| 507 (Insufficient Storage) - The destination resource does not have | | 507 (Insufficient Storage) - The destination resource does not have | |
| sufficient space to record the state of the resource after the | | sufficient space to record the state of the resource after the | |
| execution of this method. | | execution of this method. | |
| | | | |
|
| 8.9.6. COPY Examples | | 8.9.6. Example - COPY with Overwrite | |
| | | | |
| This example shows resource | | This example shows resource | |
| http://www.ics.uci.edu/~fielding/index.html being copied to the | | http://www.ics.uci.edu/~fielding/index.html being copied to the | |
| location http://www.ics.uci.edu/users/f/fielding/index.html. The 204 | | location http://www.ics.uci.edu/users/f/fielding/index.html. The 204 | |
| (No Content) status code indicates the existing resource at the | | (No Content) status code indicates the existing resource at the | |
| destination was overwritten. | | destination was overwritten. | |
| | | | |
|
| COPY with Overwrite | | | |
| | | | |
| >>Request | | >>Request | |
| | | | |
| COPY /~fielding/index.html HTTP/1.1 | | COPY /~fielding/index.html HTTP/1.1 | |
| Host: www.ics.uci.edu | | Host: www.ics.uci.edu | |
| Destination: http://www.ics.uci.edu/users/f/fielding/index.html | | Destination: http://www.ics.uci.edu/users/f/fielding/index.html | |
| | | | |
| >>Response | | >>Response | |
| | | | |
| HTTP/1.1 204 No Content | | HTTP/1.1 204 No Content | |
| | | | |
|
| | | 8.9.7. Example - COPY with No Overwrite | |
| | | | |
| The following example shows the same copy operation being performed, | | The following example shows the same copy operation being performed, | |
| but with the Overwrite header set to "F." A response of 412 | | but with the Overwrite header set to "F." A response of 412 | |
|
| (Precondition Failed) is returned because the destination resource | | (Precondition Failed) is returned because the destination URL is | |
| has a non-null state. | | already mapped to a resource. | |
| | | | |
| COPY with No Overwrite | | | |
| | | | |
| >>Request | | >>Request | |
| | | | |
| COPY /~fielding/index.html HTTP/1.1 | | COPY /~fielding/index.html HTTP/1.1 | |
| Host: www.ics.uci.edu | | Host: www.ics.uci.edu | |
| Destination: http://www.ics.uci.edu/users/f/fielding/index.html | | Destination: http://www.ics.uci.edu/users/f/fielding/index.html | |
| Overwrite: F | | Overwrite: F | |
| | | | |
| >>Response | | >>Response | |
| | | | |
| HTTP/1.1 412 Precondition Failed | | HTTP/1.1 412 Precondition Failed | |
|
| Example - COPY of a Collection | | | |
| | | 8.9.8. Example - COPY of a Collection | |
| | | | |
| >>Request | | >>Request | |
| | | | |
| COPY /container/ HTTP/1.1 | | COPY /container/ HTTP/1.1 | |
| Host: www.example.com | | Host: www.example.com | |
| Destination: http://www.example.com/othercontainer/ | | Destination: http://www.example.com/othercontainer/ | |
| Depth: infinity | | Depth: infinity | |
|
| | | | |
| >>Response | | >>Response | |
| | | | |
| HTTP/1.1 207 Multi-Status | | HTTP/1.1 207 Multi-Status | |
|
| Content-Type: text/xml; charset="utf-8" | | Content-Type: application/xml; charset="utf-8" | |
| Content-Length: xxxx | | Content-Length: xxxx | |
| | | | |
| <?xml version="1.0" encoding="utf-8" ?> | | <?xml version="1.0" encoding="utf-8" ?> | |
| | | | |
| <d:multistatus xmlns:d="DAV:"> | | <d:multistatus xmlns:d="DAV:"> | |
| <d:response> | | <d:response> | |
| <d:href>http://www.example.com/othercontainer/R2/</d:href> | | <d:href>http://www.example.com/othercontainer/R2/</d:href> | |
| <d:status>HTTP/1.1 423 Locked</d:status> | | <d:status>HTTP/1.1 423 Locked</d:status> | |
| </d:response> | | </d:response> | |
| </d:multistatus> | | </d:multistatus> | |
| | | | |
| skipping to change at page 49, line 16 | | skipping to change at page 55, line 7 | |
| resources on the same server. Therefore, it may not be possible to | | resources on the same server. Therefore, it may not be possible to | |
| move a resource within a namespace that appears to belong to the same | | move a resource within a namespace that appears to belong to the same | |
| server. | | server. | |
| | | | |
| If a resource exists at the destination, the destination resource | | If a resource exists at the destination, the destination resource | |
| will be deleted as a side-effect of the MOVE operation, subject to | | will be deleted as a side-effect of the MOVE operation, subject to | |
| the restrictions of the Overwrite header. | | the restrictions of the Overwrite header. | |
| | | | |
| 8.10.1. MOVE for Properties | | 8.10.1. MOVE for Properties | |
| | | | |
|
| Live properties described in this document MUST be moved along with | | Live properties described in this document SHOULD be moved along with | |
| the resource, such that the resource has identically behaving live | | the resource, such that the resource has identically behaving live | |
| properties at the destination resource, but not necessarily with the | | properties at the destination resource, but not necessarily with the | |
|
| same values. If the live properties will not work the same way at | | same values. Note that some live properties are defined such that | |
| the destination, the server MUST fail the request (the client can | | the absence of the property has a specific meaning (e.g. a flag with | |
| perform COPY then DELETE if it wants a MOVE to work that badly). | | one meaning if present and the opposite if absent), and in these | |
| This can mean that the server reports the live property as "Not | | cases, a successful MOVE might result in the property being reported | |
| Found" if that's the most appropriate behavior for that live property | | as "Not Found" in subsequent requests. If the live properties will | |
| at the destination, as long as the live property is still supported | | not work the same way at the destination, the server MAY fail the | |
| with the same semantics. | | request. | |
| | | | |
| MOVE is frequently used by clients to rename a file without changing | | MOVE is frequently used by clients to rename a file without changing | |
|
| its parent collection, so it's not appropriate to reset live | | its parent collection, so it's not appropriate to reset all live | |
| properties which are set at resource creation. For example, the | | properties which are set at resource creation. For example, the DAV: | |
| creationdate property value SHOULD remain the same after a MOVE. | | creationdate property value SHOULD remain the same after a MOVE. | |
| | | | |
|
| Dead properties must be moved along with the resource. | | Dead properties MUST be moved along with the resource. | |
| | | | |
| 8.10.2. MOVE for Collections | | 8.10.2. MOVE for Collections | |
| | | | |
| A MOVE with "Depth: infinity" instructs that the collection | | A MOVE with "Depth: infinity" instructs that the collection | |
| identified by the Request-URI be moved to the address specified in | | identified by the Request-URI be moved to the address specified in | |
| the Destination header, and all resources identified by its internal | | the Destination header, and all resources identified by its internal | |
| member URLs are to be moved to locations relative to it, recursively | | member URLs are to be moved to locations relative to it, recursively | |
| through all levels of the collection hierarchy. | | through all levels of the collection hierarchy. | |
| | | | |
| The MOVE method on a collection MUST act as if a "Depth: infinity" | | The MOVE method on a collection MUST act as if a "Depth: infinity" | |
| header was used on it. A client MUST NOT submit a Depth header on a | | header was used on it. A client MUST NOT submit a Depth header on a | |
| MOVE on a collection with any value but "infinity". | | MOVE on a collection with any value but "infinity". | |
| | | | |
| Any headers included with MOVE MUST be applied in processing every | | Any headers included with MOVE MUST be applied in processing every | |
| resource to be moved with the exception of the Destination header. | | resource to be moved with the exception of the Destination header. | |
| The behavior of the Destination header is the same as given for COPY | | The behavior of the Destination header is the same as given for COPY | |
| on collections. | | on collections. | |
| | | | |
| When the MOVE method has completed processing it MUST have created a | | When the MOVE method has completed processing it MUST have created a | |
|
| consistent namespace at both the source and destination (see section | | consistent URL namespace at both the source and destination (see | |
| 5.1 for the definition of namespace consistency). However, if an | | section 5.1 for the definition of namespace consistency). However, | |
| error occurs while moving an internal collection, the server MUST NOT | | if an error occurs while moving an internal collection, the server | |
| move any resources identified by members of the failed collection | | MUST NOT move any resources identified by members of the failed | |
| (i.e., the server must skip the error-causing subtree), as this would | | collection (i.e., the server must skip the error-causing subtree), as | |
| create an inconsistent namespace. In this case, after detecting the | | this would create an inconsistent namespace. In this case, after | |
| error, the move operation SHOULD try to finish as much of the | | detecting the error, the move operation SHOULD try to finish as much | |
| original move as possible (i.e., the server should still attempt to | | of the original move as possible (i.e., the server should still | |
| move other subtrees and the resources identified by their members, | | attempt to move other subtrees and the resources identified by their | |
| that are not descendents of an error-causing collection). So, for | | members, that are not descendents of an error-causing collection). | |
| example, if an infinite depth move is performed on collection /a/, | | | |
| which contains collections /a/b/ and /a/c/, and an error occurs | | So, for example, if an infinite depth move is performed on collection | |
| | | /a/, which contains collections /a/b/ and /a/c/, and an error occurs | |
| moving /a/b/, an attempt should still be made to try moving /a/c/. | | moving /a/b/, an attempt should still be made to try moving /a/c/. | |
| Similarly, after encountering an error moving a non- collection | | Similarly, after encountering an error moving a non- collection | |
| resource as part of an infinite depth move, the server SHOULD try to | | resource as part of an infinite depth move, the server SHOULD try to | |
| finish as much of the original move operation as possible. | | finish as much of the original move operation as possible. | |
| | | | |
| If an error occurs with a resource other than the resource identified | | If an error occurs with a resource other than the resource identified | |
| in the Request-URI then the response MUST be a 207 (Multi-Status), | | in the Request-URI then the response MUST be a 207 (Multi-Status), | |
| and the errored resource's URL MUST appear with the specific error. | | and the errored resource's URL MUST appear with the specific error. | |
| | | | |
| The 424 (Failed Dependency) status code SHOULD NOT be returned in the | | The 424 (Failed Dependency) status code SHOULD NOT be returned in the | |
| | | | |
| skipping to change at page 50, line 42 | | skipping to change at page 56, line 34 | |
| | | | |
| 8.10.3. MOVE and the Overwrite Header | | 8.10.3. MOVE and the Overwrite Header | |
| | | | |
| If a resource exists at the destination and the Overwrite header is | | If a resource exists at the destination and the Overwrite header is | |
| "T" then prior to performing the move the server MUST perform a | | "T" then prior to performing the move the server MUST perform a | |
| DELETE with "Depth: infinity" on the destination resource. If the | | DELETE with "Depth: infinity" on the destination resource. If the | |
| Overwrite header is set to "F" then the operation will fail. | | Overwrite header is set to "F" then the operation will fail. | |
| | | | |
| 8.10.4. Status Codes | | 8.10.4. Status Codes | |
| | | | |
|
| | | In addition to the general status codes possible, the following | |
| | | status codes have specific applicability to MOVE: | |
| | | | |
| 201 (Created) - The source resource was successfully moved, and a new | | 201 (Created) - The source resource was successfully moved, and a new | |
|
| resource was created at the destination. | | URL mapping was created at the destination. | |
| | | | |
| 204 (No Content) - The source resource was successfully moved to a | | 204 (No Content) - The source resource was successfully moved to a | |
|
| pre-existing destination resource. | | URL that was already mapped. | |
| | | | |
| 207 (Multi-Status) - Multiple resources were to be affected by the | | 207 (Multi-Status) - Multiple resources were to be affected by the | |
| MOVE, but errors on some of them prevented the operation from taking | | MOVE, but errors on some of them prevented the operation from taking | |
| place. Specific error messages, together with the most appropriate | | place. Specific error messages, together with the most appropriate | |
| of the source and destination URLs, appear in the body of the multi- | | of the source and destination URLs, appear in the body of the multi- | |
| status response. E.g. if a source resource was locked and could not | | status response. E.g. if a source resource was locked and could not | |
| be moved, then the source resource URL appears with the 423 (Locked) | | be moved, then the source resource URL appears with the 423 (Locked) | |
| status. | | status. | |
| | | | |
|
| 403 (Forbidden) - The source and destination resources are the same. | | 403 (Forbidden) - Among many possible reasons for forbidding a MOVE | |
| | | operation, this status code is recommended for use when the source | |
| | | and destination resources are the same. | |
| | | | |
| 409 (Conflict) - A resource cannot be created at the destination | | 409 (Conflict) - A resource cannot be created at the destination | |
| until one or more intermediate collections have been created. The | | until one or more intermediate collections have been created. The | |
| server MUST NOT create those intermediate collections automatically. | | server MUST NOT create those intermediate collections automatically. | |
| Or, the server was unable to preserve the behavior of the live | | Or, the server was unable to preserve the behavior of the live | |
|
| properties and still move the resource to the destination (see 'live- | | properties and still move the resource to the destination (see | |
| properties-not-preserved' postcondition). | | 'preserved-live-properties' postcondition). | |
| | | | |
|
| 412 (Precondition Failed) - A condition failed, e.g. the Overwrite | | 412 (Precondition Failed) - A condition header failed. Specific to | |
| header is "F" and the state of the destination resource is non-null. | | MOVE, this could mean that the Overwrite header is "F" and the state | |
| | | of the destination URL is already mapped to a resource. | |
| | | | |
|
| 423 (Locked) - The source or the destination resource, or some | | 423 (Locked) - The source or the destination resource, the source or | |
| resource within the source or destination collection, was locked. | | destination resource parent, or some resource within the source or | |
| This response SHOULD contain the 'missing-lock-token' precondition | | destination collection, was locked. This response SHOULD contain the | |
| element. | | 'lock-token-present' precondition element. | |
| | | | |
| 502 (Bad Gateway) - This may occur when the destination is on another | | 502 (Bad Gateway) - This may occur when the destination is on another | |
| server and the destination server refuses to accept the resource. | | server and the destination server refuses to accept the resource. | |
| This could also occur when the destination is on another sub-section | | This could also occur when the destination is on another sub-section | |
| of the same server namespace. | | of the same server namespace. | |
| | | | |
|
| 8.10.5. Examples | | 8.10.5. Example - MOVE of a Non-Collection | |
| | | | |
| This example shows resource | | This example shows resource | |
| http://www.ics.uci.edu/~fielding/index.html being moved to the | | http://www.ics.uci.edu/~fielding/index.html being moved to the | |
| location http://www.ics.uci.edu/users/f/fielding/index.html. The | | location http://www.ics.uci.edu/users/f/fielding/index.html. The | |
| contents of the destination resource would have been overwritten if | | contents of the destination resource would have been overwritten if | |
|
| the destination resource had been non-null. In this case, since | | the destination URL was already mapped to a resource. In this case, | |
| there was nothing at the destination resource, the response code is | | since there was nothing at the destination resource, the response | |
| 201 (Created). | | code is 201 (Created). | |
| | | | |
| MOVE of a Non-Collection | | | |
| | | | |
| >>Request | | >>Request | |
| | | | |
| MOVE /~fielding/index.html HTTP/1.1 | | MOVE /~fielding/index.html HTTP/1.1 | |
| Host: www.ics.uci.edu | | Host: www.ics.uci.edu | |
| Destination: http://www.ics.uci.edu/users/f/fielding/index.html | | Destination: http://www.ics.uci.edu/users/f/fielding/index.html | |
| | | | |
| >>Response | | >>Response | |
| | | | |
| HTTP/1.1 201 Created | | HTTP/1.1 201 Created | |
| Location: http://www.ics.uci.edu/users/f/fielding/index.html | | Location: http://www.ics.uci.edu/users/f/fielding/index.html | |
|
| MOVE of a Collection | | | |
| | | 8.10.6. Example - MOVE of a Collection | |
| | | | |
| >>Request | | >>Request | |
| | | | |
| MOVE /container/ HTTP/1.1 | | MOVE /container/ HTTP/1.1 | |
| Host: www.example.com | | Host: www.example.com | |
| Destination: http://www.example.com/othercontainer/ | | Destination: http://www.example.com/othercontainer/ | |
| Overwrite: F | | Overwrite: F | |
| If: (<urn:uuid:fe184f2e-6eec-41d0-c765-01adc56e6bb4>) | | If: (<urn:uuid:fe184f2e-6eec-41d0-c765-01adc56e6bb4>) | |
| (<urn:uuid:e454f3f3-acdc-452a-56c7-00a5c91e4b77>) | | (<urn:uuid:e454f3f3-acdc-452a-56c7-00a5c91e4b77>) | |
| | | | |
| >>Response | | >>Response | |
| | | | |
| HTTP/1.1 207 Multi-Status | | HTTP/1.1 207 Multi-Status | |
|
| Content-Type: text/xml; charset="utf-8" | | Content-Type: application/xml; charset="utf-8" | |
| Content-Length: xxxx | | Content-Length: xxxx | |
| | | | |
| <?xml version="1.0" encoding="utf-8" ?> | | <?xml version="1.0" encoding="utf-8" ?> | |
| <d:multistatus xmlns:d='DAV:'> | | <d:multistatus xmlns:d='DAV:'> | |
| <d:response> | | <d:response> | |
| <d:href>http://www.example.com/othercontainer/C2/</d:href> | | <d:href>http://www.example.com/othercontainer/C2/</d:href> | |
| <d:status>HTTP/1.1 423 Locked</d:status> | | <d:status>HTTP/1.1 423 Locked</d:status> | |
| </d:response> | | </d:response> | |
| </d:multistatus> | | </d:multistatus> | |
| | | | |
| | | | |
| skipping to change at page 53, line 11 | | skipping to change at page 59, line 10 | |
| type of the lock being requested. | | type of the lock being requested. | |
| | | | |
| Any resource which supports the LOCK method MUST, at minimum, support | | Any resource which supports the LOCK method MUST, at minimum, support | |
| the XML request and response formats defined herein. | | the XML request and response formats defined herein. | |
| | | | |
| A LOCK method invocation to an unlocked resource creates a lock on | | A LOCK method invocation to an unlocked resource creates a lock on | |
| the resource identified by the Request-URI, which becomes the root of | | the resource identified by the Request-URI, which becomes the root of | |
| the lock. Lock method requests to create a new lock MUST have a XML | | the lock. Lock method requests to create a new lock MUST have a XML | |
| request body which contains an owner XML element and other | | request body which contains an owner XML element and other | |
| information for this lock request. The server MUST preserve the | | information for this lock request. The server MUST preserve the | |
|
| information provided by the client in the owner field when the lock | | information provided by the client in the 'owner' field when the lock | |
| information is requested. The LOCK request MAY have a Timeout | | information is requested. The LOCK request MAY have a Timeout | |
| header. | | header. | |
| | | | |
| Clients MUST assume that locks may arbitrarily disappear at any time, | | Clients MUST assume that locks may arbitrarily disappear at any time, | |
| regardless of the value given in the Timeout header. The Timeout | | regardless of the value given in the Timeout header. The Timeout | |
| header only indicates the behavior of the server if extraordinary | | header only indicates the behavior of the server if extraordinary | |
| circumstances do not occur. For example, a sufficiently privileged | | circumstances do not occur. For example, a sufficiently privileged | |
| user may remove a lock at any time or the system may crash in such a | | user may remove a lock at any time or the system may crash in such a | |
| way that it loses the record of the lock's existence. | | way that it loses the record of the lock's existence. | |
| | | | |
| When a new lock is created, the LOCK response: | | When a new lock is created, the LOCK response: | |
| | | | |
|
| MUST contain a body with the value of the lockdiscovery property | | o MUST contain a body with the value of the DAV:lockdiscovery | |
| in a prop XML element. | | property in a prop XML element. This MUST contain the full | |
| | | information about the lock just granted, while information about | |
| | | other (shared) locks is OPTIONAL. | |
| | | | |
|
| MUST include the Lock-Token response header with the token | | o MUST include the Lock-Token response header with the token | |
| associated with the new lock. | | associated with the new lock. | |
| | | | |
| 8.11.1. Refreshing Locks | | 8.11.1. Refreshing Locks | |
| | | | |
| A lock is refreshed by sending a LOCK request without a request body | | A lock is refreshed by sending a LOCK request without a request body | |
| to the URL of a resource within the scope of the lock. This request | | to the URL of a resource within the scope of the lock. This request | |
| MUST specify which lock to refresh by using the 'Lock-Token' header | | MUST specify which lock to refresh by using the 'Lock-Token' header | |
| with a single lock token (only one lock may be refreshed at a time). | | with a single lock token (only one lock may be refreshed at a time). | |
| It MAY contain a Timeout header, which a server MAY accept to change | | It MAY contain a Timeout header, which a server MAY accept to change | |
| the duration remaining on the lock to the new value. A server MUST | | the duration remaining on the lock to the new value. A server MUST | |
| | | | |
| skipping to change at page 53, line 51 | | skipping to change at page 59, line 52 | |
| by a lock refresh. Additionally, those locks do not prevent the | | by a lock refresh. Additionally, those locks do not prevent the | |
| named lock from being refreshed. | | named lock from being refreshed. | |
| | | | |
| Note that in RFC2518, clients were indicated through the example in | | Note that in RFC2518, clients were indicated through the example in | |
| the text to use the If header to specify what lock to refresh (rather | | the text to use the If header to specify what lock to refresh (rather | |
| than the Lock-Token header). Servers are encouraged to continue to | | than the Lock-Token header). Servers are encouraged to continue to | |
| support this as well as the Lock-Token header. | | support this as well as the Lock-Token header. | |
| | | | |
| Note that the Lock-Token header is not be returned in the response | | Note that the Lock-Token header is not be returned in the response | |
| for a successful refresh LOCK request, but the LOCK response body | | for a successful refresh LOCK request, but the LOCK response body | |
|
| MUST contain the new value for the lockdiscovery body. | | MUST contain the new value for the DAV:lockdiscovery body. | |
| | | | |
| 8.11.2. Depth and Locking | | 8.11.2. Depth and Locking | |
| | | | |
| The Depth header may be used with the LOCK method. Values other than | | The Depth header may be used with the LOCK method. Values other than | |
| 0 or infinity MUST NOT be used with the Depth header on a LOCK | | 0 or infinity MUST NOT be used with the Depth header on a LOCK | |
| method. All resources that support the LOCK method MUST support the | | method. All resources that support the LOCK method MUST support the | |
| Depth header. | | Depth header. | |
| | | | |
| A Depth header of value 0 means to just lock the resource specified | | A Depth header of value 0 means to just lock the resource specified | |
| by the Request-URI. | | by the Request-URI. | |
| | | | |
| If the Depth header is set to infinity then the resource specified in | | If the Depth header is set to infinity then the resource specified in | |
| the Request-URI along with all its internal members, all the way down | | the Request-URI along with all its internal members, all the way down | |
| the hierarchy, are to be locked. A successful result MUST return a | | the hierarchy, are to be locked. A successful result MUST return a | |
| single lock token which represents all the resources that have been | | single lock token which represents all the resources that have been | |
| locked. If an UNLOCK is successfully executed on this token, all | | locked. If an UNLOCK is successfully executed on this token, all | |
|
| associated resources are unlocked. If the lock cannot be granted to | | associated resources are unlocked. Hence, partial success is not an | |
| all resources, a 207 (Multi-Status) status code MUST be returned with | | option. Either the entire hierarchy is locked or no resources are | |
| a response entity body containing a multistatus XML element | | locked. | |
| describing which resource(s) prevented the lock from being granted. | | | |
| Hence, partial success is not an option. Either the entire hierarchy | | If the lock cannot be granted to all resources, the server MUST | |
| is locked or no resources are locked. | | return a Multi-Status response with a 'response' element for at least | |
| | | one resource which prevented the lock from being granted, along with | |
| | | a suitable status code for that failure (e.g. 403 (Forbidden) or 423 | |
| | | (Locked)). Additionally, if the resource causing the failure was not | |
| | | the resource requested, then the server MUST include a 'response' | |
| | | element for the Request-URI as well, with a 'status' element | |
| | | containing 424 Failed Dependency. | |
| | | | |
| If no Depth header is submitted on a LOCK request then the request | | If no Depth header is submitted on a LOCK request then the request | |
| MUST act as if a "Depth:infinity" had been submitted. | | MUST act as if a "Depth:infinity" had been submitted. | |
| | | | |
| 8.11.3. Locking Unmapped URLs | | 8.11.3. Locking Unmapped URLs | |
| | | | |
| A successful LOCK method MUST result in the creation of an empty | | A successful LOCK method MUST result in the creation of an empty | |
| resource which is locked (and which is not a collection), when a | | resource which is locked (and which is not a collection), when a | |
| resource did not previously exist at that URL. Later on, the lock | | resource did not previously exist at that URL. Later on, the lock | |
| may go away but the empty resource remains. Empty resources MUST | | may go away but the empty resource remains. Empty resources MUST | |
| | | | |
| skipping to change at page 54, line 47 | | skipping to change at page 61, line 5 | |
| scope. A server MUST respond successfully to a GET request to an | | scope. A server MUST respond successfully to a GET request to an | |
| empty resource, either by using a 204 No Content response, or by | | empty resource, either by using a 204 No Content response, or by | |
| using 200 OK with a Content-Length header indicating zero length and | | using 200 OK with a Content-Length header indicating zero length and | |
| no Content-Type. | | no Content-Type. | |
| | | | |
| 8.11.4. Lock Compatibility Table | | 8.11.4. Lock Compatibility Table | |
| | | | |
| The table below describes the behavior that occurs when a lock | | The table below describes the behavior that occurs when a lock | |
| request is made on a resource. | | request is made on a resource. | |
| | | | |
|
| Current State Shared Lock Request Exclusive Lock Request | | +--------------------------+----------------+-------------------+ | |
| ---------------------------------------------------------------- | | | Current State | Shared Lock OK | Exclusive Lock OK | | |
| None True True | | +--------------------------+----------------+-------------------+ | |
| Shared Lock True False | | | None | True | True | | |
| Exclusive Lock False False* | | | | | | | |
| | | | Shared Lock | True | False | | |
| | | | | | | | |
| | | | Exclusive Lock | False | False* | | |
| | | +--------------------------+----------------+-------------------+ | |
| | | | |
| Legend: True = lock may be granted. False = lock MUST NOT be | | Legend: True = lock may be granted. False = lock MUST NOT be | |
| granted. *=It is illegal for a principal to request the same lock | | granted. *=It is illegal for a principal to request the same lock | |
| twice. | | twice. | |
| | | | |
| The current lock state of a resource is given in the leftmost column, | | The current lock state of a resource is given in the leftmost column, | |
| and lock requests are listed in the first row. The intersection of a | | and lock requests are listed in the first row. The intersection of a | |
| row and column gives the result of a lock request. For example, if a | | row and column gives the result of a lock request. For example, if a | |
| shared lock is held on a resource, and an exclusive lock is | | shared lock is held on a resource, and an exclusive lock is | |
| requested, the table entry is "false", indicating the lock must not | | requested, the table entry is "false", indicating the lock must not | |
| be granted. | | be granted. | |
| | | | |
|
| 8.11.5. LOCK responses | | 8.11.5. LOCK Responses | |
| | | | |
|
| 200 (OK) - The lock request succeeded and the value of the | | In addition to the general status codes possible, the following | |
| lockdiscovery property is included in the body. | | status codes have specific applicability to LOCK: | |
| | | | |
| | | 200 (OK) - The LOCK request succeeded and the value of the DAV: | |
| | | lockdiscovery property is included in the response body. | |
| | | | |
| | | 201 (Created) - The LOCK request was to an unmapped URL, the request | |
| | | succeeded and resulted in the creation of a new resource, and the | |
| | | value of the DAV:lockdiscovery property is included in the response | |
| | | body. | |
| | | | |
| 409 (Conflict) - A resource cannot be created at the destination | | 409 (Conflict) - A resource cannot be created at the destination | |
| until one or more intermediate collections have been created. The | | until one or more intermediate collections have been created. The | |
| server MUST NOT create those intermediate collections automatically. | | server MUST NOT create those intermediate collections automatically. | |
| | | | |
|
| 423 (Locked) - The resource is locked already. For consistency's | | 423 (Locked) - The resource is locked already. | |
| sake, this response SHOULD contain the 'missing-lock-token' | | | |
| precondition element. | | | |
| | | | |
| h 400 (Bad Request), with 'request-uri-must-match-lock-token' | | | |
| precondition - The LOCK request was made with a Lock-Token header, | | | |
| indicating that the client wishes to refresh the given lock. | | | |
| However, the Request-URI did not fall within the scope of the lock | | | |
| identified by the token. The lock may have a scope that does not | | | |
| include the Request-URI, or the lock could have disappeared, or the | | | |
| token may be invalid. | | | |
| | | | |
|
| 424 (Failed Dependency) - This may appear inside a 207 response to a | | 400 (Bad Request), with 'lock-token-matches-request-uri' precondition | |
| LOCK request, to indicate that a resource could not be locked because | | code - The LOCK request was made with a Lock-Token header, indicating | |
| of a failure on another resource. | | that the client wishes to refresh the given lock. However, the | |
| | | Request-URI did not fall within the scope of the lock identified by | |
| | | the token. The lock may have a scope that does not include the | |
| | | Request-URI, or the lock could have disappeared, or the token may be | |
| | | invalid. | |
| | | | |
| 8.11.6. Example - Simple Lock Request | | 8.11.6. Example - Simple Lock Request | |
| | | | |
| >>Request | | >>Request | |
| | | | |
| LOCK /workspace/webdav/proposal.doc HTTP/1.1 | | LOCK /workspace/webdav/proposal.doc HTTP/1.1 | |
| Host: example.com | | Host: example.com | |
| Timeout: Infinite, Second-4100000000 | | Timeout: Infinite, Second-4100000000 | |
|
| Content-Type: text/xml; charset="utf-8" | | Content-Type: application/xml; charset="utf-8" | |
| Content-Length: xxxx | | Content-Length: xxxx | |
| Authorization: Digest username="ejw", | | Authorization: Digest username="ejw", | |
| realm="ejw@example.com", nonce="...", | | realm="ejw@example.com", nonce="...", | |
| uri="/workspace/webdav/proposal.doc", | | uri="/workspace/webdav/proposal.doc", | |
| response="...", opaque="..." | | response="...", opaque="..." | |
| | | | |
| <?xml version="1.0" encoding="utf-8" ?> | | <?xml version="1.0" encoding="utf-8" ?> | |
| <D:lockinfo xmlns:D='DAV:'> | | <D:lockinfo xmlns:D='DAV:'> | |
| <D:lockscope><D:exclusive/></D:lockscope> | | <D:lockscope><D:exclusive/></D:lockscope> | |
| <D:locktype><D:write/></D:locktype> | | <D:locktype><D:write/></D:locktype> | |
| | | | |
| skipping to change at page 56, line 14 | | skipping to change at page 63, line 4 | |
| response="...", opaque="..." | | response="...", opaque="..." | |
| | | | |
| <?xml version="1.0" encoding="utf-8" ?> | | <?xml version="1.0" encoding="utf-8" ?> | |
| <D:lockinfo xmlns:D='DAV:'> | | <D:lockinfo xmlns:D='DAV:'> | |
| <D:lockscope><D:exclusive/></D:lockscope> | | <D:lockscope><D:exclusive/></D:lockscope> | |
| <D:locktype><D:write/></D:locktype> | | <D:locktype><D:write/></D:locktype> | |
| <D:owner> | | <D:owner> | |
| <D:href>http://www.ics.uci.edu/~ejw/contact.html</D:href> | | <D:href>http://www.ics.uci.edu/~ejw/contact.html</D:href> | |
| </D:owner> | | </D:owner> | |
| </D:lockinfo> | | </D:lockinfo> | |
|
| | | | |
| >>Response | | >>Response | |
| | | | |
| HTTP/1.1 200 OK | | HTTP/1.1 200 OK | |
| Lock-Token: <urn:uuid:e71d4fae-5dec-22d6-fea5-00a0c91e6be4> | | Lock-Token: <urn:uuid:e71d4fae-5dec-22d6-fea5-00a0c91e6be4> | |
|
| Content-Type: text/xml; charset="utf-8" | | Content-Type: application/xml; charset="utf-8" | |
| Content-Length: xxxx | | Content-Length: xxxx | |
| | | | |
| <?xml version="1.0" encoding="utf-8" ?> | | <?xml version="1.0" encoding="utf-8" ?> | |
| <D:prop xmlns:D="DAV:"> | | <D:prop xmlns:D="DAV:"> | |
| <D:lockdiscovery> | | <D:lockdiscovery> | |
| <D:activelock> | | <D:activelock> | |
| <D:locktype><D:write/></D:locktype> | | <D:locktype><D:write/></D:locktype> | |
| <D:lockscope><D:exclusive/></D:lockscope> | | <D:lockscope><D:exclusive/></D:lockscope> | |
| <D:depth>infinity</D:depth> | | <D:depth>infinity</D:depth> | |
| <D:owner> | | <D:owner> | |
|
| <D:href> | | <D:href>http://www.ics.uci.edu/~ejw/contact.html</D:href> | |
| http://www.ics.uci.edu/~ejw/contact.html | | | |
| </D:href> | | | |
| </D:owner> | | </D:owner> | |
| <D:timeout>Second-604800</D:timeout> | | <D:timeout>Second-604800</D:timeout> | |
| <D:locktoken> | | <D:locktoken> | |
|
| <D:href>urn:uuid:e71d4fae-5dec-22d6-fea5-00a0c91e6be4< | | <D:href | |
| /D:href> | | >urn:uuid:e71d4fae-5dec-22d6-fea5-00a0c91e6be4</D:href> | |
| </D:locktoken> | | </D:locktoken> | |
| <D:lockroot> | | <D:lockroot> | |
| <D:href | | <D:href | |
|
| >http://example.com/workspace/webdav/proposal.doc< | | >http://example.com/workspace/webdav/proposal.doc</D:href> | |
| /D:href> | | | |
| </D:lockroot> | | </D:lockroot> | |
| </D:activelock> | | </D:activelock> | |
| </D:lockdiscovery> | | </D:lockdiscovery> | |
| </D:prop> | | </D:prop> | |
| | | | |
| This example shows the successful creation of an exclusive write lock | | This example shows the successful creation of an exclusive write lock | |
| on resource http://example.com/workspace/webdav/proposal.doc. The | | on resource http://example.com/workspace/webdav/proposal.doc. The | |
| resource http://www.ics.uci.edu/~ejw/contact.html contains contact | | resource http://www.ics.uci.edu/~ejw/contact.html contains contact | |
| information for the owner of the lock. The server has an activity- | | information for the owner of the lock. The server has an activity- | |
| based timeout policy in place on this resource, which causes the lock | | based timeout policy in place on this resource, which causes the lock | |
| to automatically be removed after 1 week (604800 seconds). Note that | | to automatically be removed after 1 week (604800 seconds). Note that | |
| the nonce, response, and opaque fields have not been calculated in | | the nonce, response, and opaque fields have not been calculated in | |
| the Authorization request header. | | the Authorization request header. | |
| | | | |
|
| Note that the locktoken and lockroot href elements would not contain | | | |
| any whitespace. The line return appearing in this document is only | | | |
| for formatting. | | | |
| | | | |
| 8.11.7. Example - Refreshing a Write Lock | | 8.11.7. Example - Refreshing a Write Lock | |
| | | | |
| >>Request | | >>Request | |
| | | | |
| LOCK /workspace/webdav/proposal.doc HTTP/1.1 | | LOCK /workspace/webdav/proposal.doc HTTP/1.1 | |
| Host: example.com | | Host: example.com | |
| Timeout: Infinite, Second-4100000000 | | Timeout: Infinite, Second-4100000000 | |
| Lock-Token: <urn:uuid:e71d4fae-5dec-22d6-fea5-00a0c91e6be4> | | Lock-Token: <urn:uuid:e71d4fae-5dec-22d6-fea5-00a0c91e6be4> | |
| Authorization: Digest username="ejw", | | Authorization: Digest username="ejw", | |
| realm="ejw@example.com", nonce="...", | | realm="ejw@example.com", nonce="...", | |
| uri="/workspace/webdav/proposal.doc", | | uri="/workspace/webdav/proposal.doc", | |
| response="...", opaque="..." | | response="...", opaque="..." | |
| | | | |
| >>Response | | >>Response | |
| | | | |
| HTTP/1.1 200 OK | | HTTP/1.1 200 OK | |
|
| Content-Type: text/xml; charset="utf-8" | | Content-Type: application/xml; charset="utf-8" | |
| Content-Length: xxxx | | Content-Length: xxxx | |
| | | | |
| <?xml version="1.0" encoding="utf-8" ?> | | <?xml version="1.0" encoding="utf-8" ?> | |
| <D:prop xmlns:D="DAV:"> | | <D:prop xmlns:D="DAV:"> | |
| <D:lockdiscovery> | | <D:lockdiscovery> | |
| <D:activelock> | | <D:activelock> | |
| <D:locktype><D:write/></D:locktype> | | <D:locktype><D:write/></D:locktype> | |
| <D:lockscope><D:exclusive/></D:lockscope> | | <D:lockscope><D:exclusive/></D:lockscope> | |
| <D:depth>infinity</D:depth> | | <D:depth>infinity</D:depth> | |
| <D:owner> | | <D:owner> | |
|
| <D:href> | | <D:href>http://www.ics.uci.edu/~ejw/contact.html</D:href> | |
| http://www.ics.uci.edu/~ejw/contact.html | | | |
| </D:href> | | | |
| </D:owner> | | </D:owner> | |
| <D:timeout>Second-604800</D:timeout> | | <D:timeout>Second-604800</D:timeout> | |
| <D:locktoken> | | <D:locktoken> | |
|
| <D:href>urn:uuid:e71d4fae-5dec-22d6-fea5-00a0c91e6be4< | | <D:href | |
| /D:href> | | >urn:uuid:e71d4fae-5dec-22d6-fea5-00a0c91e6be4</D:href> | |
| </D:locktoken> | | </D:locktoken> | |
| <D:lockroot> | | <D:lockroot> | |
| <D:href | | <D:href | |
|
| >http://example.com/workspace/webdav/proposal.doc< | | >http://example.com/workspace/webdav/proposal.doc</D:href> | |
| /D:href> | | | |
| </D:lockroot> | | </D:lockroot> | |
| </D:activelock> | | </D:activelock> | |
| </D:lockdiscovery> | | </D:lockdiscovery> | |
| </D:prop> | | </D:prop> | |
| | | | |
| This request would refresh the lock, attempting to reset the timeout | | This request would refresh the lock, attempting to reset the timeout | |
| to the new value specified in the timeout header. Notice that the | | to the new value specified in the timeout header. Notice that the | |
| client asked for an infinite time out but the server choose to ignore | | client asked for an infinite time out but the server choose to ignore | |
| the request. In this example, the nonce, response, and opaque fields | | the request. In this example, the nonce, response, and opaque fields | |
| have not been calculated in the Authorization request header. | | have not been calculated in the Authorization request header. | |
| | | | |
| 8.11.8. Example - Multi-Resource Lock Request | | 8.11.8. Example - Multi-Resource Lock Request | |
| | | | |
| >>Request | | >>Request | |
| | | | |
| LOCK /webdav/ HTTP/1.1 | | LOCK /webdav/ HTTP/1.1 | |
| Host: example.com | | Host: example.com | |
| Timeout: Infinite, Second-4100000000 | | Timeout: Infinite, Second-4100000000 | |
| Depth: infinity | | Depth: infinity | |
|
| Content-Type: text/xml; charset="utf-8" | | Content-Type: application/xml; charset="utf-8" | |
| Content-Length: xxxx | | Content-Length: xxxx | |
| Authorization: Digest username="ejw", | | Authorization: Digest username="ejw", | |
| realm="ejw@example.com", nonce="...", | | realm="ejw@example.com", nonce="...", | |
| uri="/workspace/webdav/proposal.doc", | | uri="/workspace/webdav/proposal.doc", | |
| response="...", opaque="..." | | response="...", opaque="..." | |
| | | | |
| <?xml version="1.0" encoding="utf-8" ?> | | <?xml version="1.0" encoding="utf-8" ?> | |
| <D:lockinfo xmlns:D="DAV:"> | | <D:lockinfo xmlns:D="DAV:"> | |
| <D:locktype><D:write/></D:locktype> | | <D:locktype><D:write/></D:locktype> | |
| <D:lockscope><D:exclusive/></D:lockscope> | | <D:lockscope><D:exclusive/></D:lockscope> | |
| <D:owner> | | <D:owner> | |
| <D:href>http://www.ics.uci.edu/~ejw/contact.html</D:href> | | <D:href>http://www.ics.uci.edu/~ejw/contact.html</D:href> | |
| </D:owner> | | </D:owner> | |
| </D:lockinfo> | | </D:lockinfo> | |
| | | | |
| >>Response | | >>Response | |
| | | | |
| HTTP/1.1 207 Multi-Status | | HTTP/1.1 207 Multi-Status | |
|
| Content-Type: text/xml; charset="utf-8" | | Content-Type: application/xml; charset="utf-8" | |
| Content-Length: xxxx | | Content-Length: xxxx | |
| | | | |
| <?xml version="1.0" encoding="utf-8" ?> | | <?xml version="1.0" encoding="utf-8" ?> | |
| <D:multistatus xmlns:D="DAV:"> | | <D:multistatus xmlns:D="DAV:"> | |
| <D:response> | | <D:response> | |
| <D:href>http://example.com/webdav/secret</D:href> | | <D:href>http://example.com/webdav/secret</D:href> | |
| <D:status>HTTP/1.1 403 Forbidden</D:status> | | <D:status>HTTP/1.1 403 Forbidden</D:status> | |
| </D:response> | | </D:response> | |
| <D:response> | | <D:response> | |
| <D:href>http://example.com/webdav/</D:href> | | <D:href>http://example.com/webdav/</D:href> | |
|
| <D:propstat> | | | |
| <D:prop><D:lockdiscovery/></D:prop> | | | |
| <D:status>HTTP/1.1 424 Failed Dependency</D:status> | | <D:status>HTTP/1.1 424 Failed Dependency</D:status> | |
|
| </D:propstat> | | | |
| </D:response> | | </D:response> | |
| </D:multistatus> | | </D:multistatus> | |
|
| | | | |
| This example shows a request for an exclusive write lock on a | | This example shows a request for an exclusive write lock on a | |
| collection and all its children. In this request, the client has | | collection and all its children. In this request, the client has | |
| specified that it desires an infinite length lock, if available, | | specified that it desires an infinite length lock, if available, | |
| otherwise a timeout of 4.1 billion seconds, if available. The | | otherwise a timeout of 4.1 billion seconds, if available. The | |
| request entity body contains the contact information for the | | request entity body contains the contact information for the | |
| principal taking out the lock, in this case a web page URL. | | principal taking out the lock, in this case a web page URL. | |
| | | | |
| The error is a 403 (Forbidden) response on the resource | | The error is a 403 (Forbidden) response on the resource | |
| http://example.com/webdav/secret. Because this resource could not be | | http://example.com/webdav/secret. Because this resource could not be | |
|
| locked, none of the resources were locked. Note also that the | | locked, none of the resources were locked. Note also that the a | |
| lockdiscovery property for the Request-URI has been included as | | 'response' element for the Request-URI itself has been included as | |
| required. In this example the lockdiscovery property is empty which | | required. | |
| means that there are no outstanding locks on the resource. | | | |
| | | | |
| In this example, the nonce, response, and opaque fields have not been | | In this example, the nonce, response, and opaque fields have not been | |
| calculated in the Authorization request header. | | calculated in the Authorization request header. | |
| | | | |
| 8.12. UNLOCK Method | | 8.12. UNLOCK Method | |
| | | | |
| The UNLOCK method removes the lock identified by the lock token in | | The UNLOCK method removes the lock identified by the lock token in | |
| the Lock-Token request header. The Request-URI MUST identify a | | the Lock-Token request header. The Request-URI MUST identify a | |
|
| resource within the scope of the lock. The If header is not needed | | resource within the scope of the lock. | |
| to provide the lock token although servers SHOULD still evaluate the | | | |
| If header and treat it as a conditional header. | | Note that use of Lock-Token header to provide the lock token is not | |
| | | consistent with other state-changing methods which all require an If | |
| | | header with the lock token. Thus, the If header is not needed to | |
| | | provide the lock token. Naturally when the If header is present it | |
| | | has its normal meaning as a conditional header. | |
| | | | |
| For a successful response to this method, the server MUST remove the | | For a successful response to this method, the server MUST remove the | |
| lock from the resource identified by the Request-URI and from all | | lock from the resource identified by the Request-URI and from all | |
| other resources included in the lock. | | other resources included in the lock. | |
| | | | |
| If all resources which have been locked under the submitted lock | | If all resources which have been locked under the submitted lock | |
| token can not be unlocked then the UNLOCK request MUST fail. | | token can not be unlocked then the UNLOCK request MUST fail. | |
| | | | |
| A successful response to an UNLOCK method does not mean that the | | A successful response to an UNLOCK method does not mean that the | |
| resource is necessarily unlocked. It means that the specific lock | | resource is necessarily unlocked. It means that the specific lock | |
| corresponding to the specified token no longer exists. | | corresponding to the specified token no longer exists. | |
| | | | |
| Any DAV compliant resource which supports the LOCK method MUST | | Any DAV compliant resource which supports the LOCK method MUST | |
| support the UNLOCK method. | | support the UNLOCK method. | |
| | | | |
| 8.12.1. Status Codes | | 8.12.1. Status Codes | |
| | | | |
|
| | | In addition to the general status codes possible, the following | |
| | | status codes have specific applicability to UNLOCK: | |
| | | | |
| 204 (No Content) - Normal success response (rather than 200 OK, since | | 204 (No Content) - Normal success response (rather than 200 OK, since | |
| 200 OK would imply a response body, and an UNLOCK success response | | 200 OK would imply a response body, and an UNLOCK success response | |
| does not normally contain a body) | | does not normally contain a body) | |
| | | | |
|
| 400 (Bad Request) - No lock token was provided (see 'missing-lock- | | 400 (Bad Request) - No lock token was provided (see 'lock-token- | |
| token' precondition), or request was made to a Request-URI that was | | present' precondition), or request was made to a Request-URI that was | |
| not within the scope of the lock (see 'requesturi-must-match-lock- | | not within the scope of the lock (see 'lock-token-matches-request- | |
| token' precondition). | | uri' precondition). | |
| | | | |
| 403 (Forbidden) - The currently authenticated principal does not have | | 403 (Forbidden) - The currently authenticated principal does not have | |
|
| permission to remove the lock (the server SHOULD use the 'need- | | permission to remove the lock. | |
| privileges' precondition element). | | | |
| | | | |
|
| 412 (Precondition Failed) - The resource was not locked. | | 409 (Conflict) - The resource was not locked and thus could not be | |
| | | unlocked. | |
| | | | |
|
| 8.12.2. Example | | 8.12.2. Example - UNLOCK | |
| | | | |
| >>Request | | >>Request | |
| | | | |
| UNLOCK /workspace/webdav/info.doc HTTP/1.1 | | UNLOCK /workspace/webdav/info.doc HTTP/1.1 | |
| Host: example.com | | Host: example.com | |
| Lock-Token: <urn:uuid:a515cfa4-5da4-22e1-f5b5-00a0451e6bf7> | | Lock-Token: <urn:uuid:a515cfa4-5da4-22e1-f5b5-00a0451e6bf7> | |
|
| Authorization: Digest username="ejw", | | Authorization: Digest username="ejw" | |
| realm="ejw@example.com", nonce="...", | | realm="ejw@example.com", nonce="...", | |
| uri="/workspace/webdav/proposal.doc", | | uri="/workspace/webdav/proposal.doc", | |
| response="...", opaque="..." | | response="...", opaque="..." | |
| | | | |
| >>Response | | >>Response | |
| | | | |
| HTTP/1.1 204 No Content | | HTTP/1.1 204 No Content | |
| | | | |
| In this example, the lock identified by the lock token | | In this example, the lock identified by the lock token | |
| "urn:uuid:a515cfa4-5da4-22e1-f5b5-00a0451e6bf7" is successfully | | "urn:uuid:a515cfa4-5da4-22e1-f5b5-00a0451e6bf7" is successfully | |
| | | | |
| skipping to change at page 62, line 10 | | skipping to change at page 68, line 10 | |
| instead of 200 (OK) because there is no response entity body. | | instead of 200 (OK) because there is no response entity body. | |
| | | | |
| In this example, the nonce, response, and opaque fields have not been | | In this example, the nonce, response, and opaque fields have not been | |
| calculated in the Authorization request header. | | calculated in the Authorization request header. | |
| | | | |
| 9. HTTP Headers for Distributed Authoring | | 9. HTTP Headers for Distributed Authoring | |
| | | | |
| All DAV headers follow the same basic formatting rules as HTTP | | All DAV headers follow the same basic formatting rules as HTTP | |
| headers. This includes rules like line continuation and how to | | headers. This includes rules like line continuation and how to | |
| combine (or separate) multiple instances of the same header using | | combine (or separate) multiple instances of the same header using | |
|
| commas. | | commas. WebDAV adds two new conditional headers to the set defined | |
| | | in HTTP: the If and Overwrite headers. | |
| | | | |
| 9.1. DAV Header | | 9.1. DAV Header | |
| | | | |
|
| DAV = "DAV" ":" #( compliance-code ) | | DAV = "DAV" ":" #( compliance-class ) | |
| compliance-code = ( "1" | "2" | "bis" | extend ) | | compliance-class = ( "1" | "2" | "bis" | extend ) | |
| extend = Coded-URL | token | | extend = Coded-URL | token | |
|
| | | Coded-URL = "<" absolute-URI ">" | |
| | | ; No LWS allowed in Coded-URL | |
| | | | |
| This general-header appearing in the response indicates that the | | This general-header appearing in the response indicates that the | |
| resource supports the DAV schema and protocol as specified. All DAV | | resource supports the DAV schema and protocol as specified. All DAV | |
|
| compliant resources MUST return the DAV header on all OPTIONS | | compliant resources MUST return the DAV header with compliance-class | |
| responses. | | "1" on all OPTIONS responses. | |
| | | | |
| The value is a comma-separated list of all compliance class | | The value is a comma-separated list of all compliance class | |
| identifiers that the resource supports. Class identifiers may be | | identifiers that the resource supports. Class identifiers may be | |
| Coded-URLs or tokens (as defined by [RFC2616]). Identifiers can | | Coded-URLs or tokens (as defined by [RFC2616]). Identifiers can | |
| appear in any order. Identifiers that are standardized through the | | appear in any order. Identifiers that are standardized through the | |
| IETF RFC process are tokens, but other identifiers SHOULD be Coded- | | IETF RFC process are tokens, but other identifiers SHOULD be Coded- | |
| URLs to encourage uniqueness. | | URLs to encourage uniqueness. | |
| | | | |
| A resource must show class 1 compliance if it shows class 2 or "bis" | | A resource must show class 1 compliance if it shows class 2 or "bis" | |
| compliance. In general, support for one compliance class does not | | compliance. In general, support for one compliance class does not | |
| entail support for any other. Please refer to section 16 for more | | entail support for any other. Please refer to section 16 for more | |
| details on compliance classes defined in this specification. | | details on compliance classes defined in this specification. | |
| | | | |
| This header must also appear on responses to OPTIONS requests to the | | This header must also appear on responses to OPTIONS requests to the | |
| special '*' Request-URI as defined in HTTP/1.1. In this case it | | special '*' Request-URI as defined in HTTP/1.1. In this case it | |
| means that the repository supports the named features in at least | | means that the repository supports the named features in at least | |
|
| some internal namespaces. | | some internal URL namespaces. | |
| | | | |
|
| As an optional request header, this header allows the client to | | As a request header, this header allows the client to advertise | |
| advertise compliance with named features. Clients need not advertise | | compliance with named features when the server needs that | |
| 1, 2 or bis because a WebDAV server currently doesn't need that | | information. Clients SHOULD NOT send this header unless a standards | |
| information to decide how to respond to requests defined in this | | track specification requires it. Any extension that makes use of | |
| specification or in HTTP/1.1. However, future extensions may define | | this as a request header will need to carefully consider caching | |
| client compliance codes. When used as a request header, the DAV | | implications. | |
| header MAY affect caching so this header SHOULD NOT be used on all | | | |
| GET requests. | | | |
| | | | |
| 9.2. Depth Header | | 9.2. Depth Header | |
| | | | |
| Depth = "Depth" ":" ("0" | "1" | "infinity") | | Depth = "Depth" ":" ("0" | "1" | "infinity") | |
| The Depth request header is used with methods executed on resources | | The Depth request header is used with methods executed on resources | |
| which could potentially have internal members to indicate whether the | | which could potentially have internal members to indicate whether the | |
| method is to be applied only to the resource ("Depth: 0"), to the | | method is to be applied only to the resource ("Depth: 0"), to the | |
| resource and its immediate children, ("Depth: 1"), or the resource | | resource and its immediate children, ("Depth: 1"), or the resource | |
| and all its progeny ("Depth: infinity"). | | and all its progeny ("Depth: infinity"). | |
| | | | |
| | | | |
| skipping to change at page 64, line 17 | | skipping to change at page 70, line 17 | |
| method should fail not because the resource doesn't have internal | | method should fail not because the resource doesn't have internal | |
| members, but because of the illegal value in the header. | | members, but because of the illegal value in the header. | |
| | | | |
| 9.3. Destination Header | | 9.3. Destination Header | |
| | | | |
| Destination = "Destination" ":" ( absolute-URI ) | | Destination = "Destination" ":" ( absolute-URI ) | |
| | | | |
| The Destination request header specifies the URI which identifies a | | The Destination request header specifies the URI which identifies a | |
| destination resource for methods such as COPY and MOVE, which take | | destination resource for methods such as COPY and MOVE, which take | |
| two URIs as parameters. Note that the absolute-URI production is | | two URIs as parameters. Note that the absolute-URI production is | |
|
| defined in RFC3986 [8]. | | defined in [RFC3986]. | |
| | | | |
| If the Destination value is an absolute URI, it may name a different | | If the Destination value is an absolute URI, it may name a different | |
| server (or different port or scheme). If the source server cannot | | server (or different port or scheme). If the source server cannot | |
| attempt a copy to the remote server, it MUST fail the request with a | | attempt a copy to the remote server, it MUST fail the request with a | |
|
| 502 (Bad Gateway) response. Servers MAY attempt to copy the resource | | 502 (Bad Gateway) response. | |
| to the remote server using PUT/PROPPATCH or another mechanism. | | | |
| | | | |
| 9.4. Force-Authentication Header | | 9.4. Force-Authentication Header | |
| | | | |
| Force-Authentication = "Force-Authentication" ":" Method | | Force-Authentication = "Force-Authentication" ":" Method | |
| | | | |
| The Force-Authentication request header is used with the OPTIONS | | The Force-Authentication request header is used with the OPTIONS | |
| method to specify that the client wants to be challenged for | | method to specify that the client wants to be challenged for | |
| authentication credentials to the resource identified by the Request- | | authentication credentials to the resource identified by the Request- | |
| URI. If present on a request to a WebDAV-compliant resource, the | | URI. If present on a request to a WebDAV-compliant resource, the | |
| server MUST respond with either 401 (Unauthorized) or 501 (Not | | server MUST respond with either 401 (Unauthorized) or 501 (Not | |
| | | | |
| skipping to change at page 64, line 47 | | skipping to change at page 70, line 46 | |
| | | | |
| 9.5. If Header | | 9.5. If Header | |
| | | | |
| If = "If" ":" ( 1*No-tag-list | 1*Tagged-list) | | If = "If" ":" ( 1*No-tag-list | 1*Tagged-list) | |
| No-tag-list = List | | No-tag-list = List | |
| Tagged-list = Resource 1*List | | Tagged-list = Resource 1*List | |
| Resource = Coded-URL | | Resource = Coded-URL | |
| List = #( "(" List | Clause ")" ) | | List = #( "(" List | Clause ")" ) | |
| Clause = ["Not"] State-token | State-token | | Clause = ["Not"] State-token | State-token | |
| State-token = Coded-URL | "[" entity-tag "]" | | State-token = Coded-URL | "[" entity-tag "]" | |
|
| Coded-URL = "<" absolute-URI ">" | | | |
| | | | |
| The If request header is intended to have similar functionality to | | The If request header is intended to have similar functionality to | |
|
| the If-Match header defined in section 14.24 of RFC2616 [6]. However | | the If-Match header defined in section 14.24 of [RFC2616]. However | |
| the If header is intended for use with any URI which represents state | | the If header is intended for use with any URI which represents state | |
| information, referred to as a state token, about a resource as well | | information, referred to as a state token, about a resource as well | |
| as ETags. A typical example of a state token is a lock token, and | | as ETags. A typical example of a state token is a lock token, and | |
| lock tokens are the only state tokens defined in this specification. | | lock tokens are the only state tokens defined in this specification. | |
| The <DAV:no-lock> state token is an example of a state token that | | The <DAV:no-lock> state token is an example of a state token that | |
| will never match an actual valid lock token. The purpose of this is | | will never match an actual valid lock token. The purpose of this is | |
|
| described in Section 9.5.3. | | described in Section 9.5.4. | |
| | | | |
| The If header's purpose is to describe a series of state lists. If | | The If header's purpose is to describe a series of state lists. If | |
| the state of the resource to which the header is applied does not | | the state of the resource to which the header is applied does not | |
| match any of the specified state lists then the request MUST fail | | match any of the specified state lists then the request MUST fail | |
| with a 412 (Precondition Failed). If one of the described state | | with a 412 (Precondition Failed). If one of the described state | |
| lists matches the state of the resource then the request may succeed. | | lists matches the state of the resource then the request may succeed. | |
| | | | |
| The server must parse the If header when it appears on any request, | | The server must parse the If header when it appears on any request, | |
| evaluate all the clauses, and if the conditional evaluates to false, | | evaluate all the clauses, and if the conditional evaluates to false, | |
| fail the request. | | fail the request. | |
| | | | |
|
| Note that the absolute-URI production is defined in RFC3986 [8]. | | Note that the absolute-URI production is defined in [RFC3986]. | |
| | | | |
| RFC2518 originally defined the If header without comma separators. | | | |
| This oversight meant that the If header couldn't be divided up among | | | |
| multiple lines according to the HTTP header manipulation rules. | | | |
| Servers supporting "bis" MUST be able to accept commas in If header | | | |
| values. If the header has commas between tokens or clauses, the | | | |
| header can be evaluated simply by removing the commas and proceeding | | | |
| with the evaluation rules. | | | |
| | | | |
| 9.5.1. No-tag-list Production | | 9.5.1. No-tag-list Production | |
| | | | |
| The No-tag-list production describes a series of state tokens and | | The No-tag-list production describes a series of state tokens and | |
| ETags. If multiple No-tag-list productions are used then one only | | ETags. If multiple No-tag-list productions are used then one only | |
| needs to match the state of the resource for the method to be allowed | | needs to match the state of the resource for the method to be allowed | |
| to continue. All untagged tokens apply to the resource identified in | | to continue. All untagged tokens apply to the resource identified in | |
| the Request-URI. | | the Request-URI. | |
| | | | |
| Example - no-tag-list production | | Example - no-tag-list production | |
| | | | |
| If: (<urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2> | | If: (<urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2> | |
|
| ["I am an ETag"]), (["I am another ETag"]) | | ["I am an ETag"]) (["I am another ETag"]) | |
| | | | |
| The previous header would require that the resource identified in the | | The previous header would require that the resource identified in the | |
| Request-URI be locked with the specified lock token and in the state | | Request-URI be locked with the specified lock token and in the state | |
| identified by the "I am an ETag" ETag or in the state identified by | | identified by the "I am an ETag" ETag or in the state identified by | |
| the second ETag "I am another ETag". To put the matter more plainly | | the second ETag "I am another ETag". To put the matter more plainly | |
| one can think of the previous If header as being in the form (or (and | | one can think of the previous If header as being in the form (or (and | |
| <urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2> ["I am an ETag"]) | | <urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2> ["I am an ETag"]) | |
| (and ["I am another ETag"])). | | (and ["I am another ETag"])). | |
| | | | |
| 9.5.2. Tagged-list Production | | 9.5.2. Tagged-list Production | |
| | | | |
| The tagged-list production may be used instead of the no-tag-list | | The tagged-list production may be used instead of the no-tag-list | |
| production, in order to scope each token to a specific resource. | | production, in order to scope each token to a specific resource. | |
| That is, it specifies that the lists following the resource | | That is, it specifies that the lists following the resource | |
| specification only apply to the specified resource. The scope of the | | specification only apply to the specified resource. The scope of the | |
| resource production begins with the list production immediately | | resource production begins with the list production immediately | |
| following the resource production and ends with the next resource | | following the resource production and ends with the next resource | |
| production, if any. All clauses must be evaluated. If the state of | | production, if any. All clauses must be evaluated. If the state of | |
| the resource named in the tag does not match any of the associated | | the resource named in the tag does not match any of the associated | |
| state lists then the request MUST fail with a 412 (Precondition | | state lists then the request MUST fail with a 412 (Precondition | |
|
| Failed). The tagged-list production MUST NOT be used together with | | Failed). | |
| the no-tag-list production, either in the same If header or in a | | | |
| continuation. | | | |
| | | | |
| The same URI MUST NOT appear more than once in a resource production | | The same URI MUST NOT appear more than once in a resource production | |
| in an If header. | | in an If header. | |
| | | | |
|
| Example - Tagged List If header | | 9.5.3. Example - Tagged List If header in COPY | |
| | | | |
| | | >>Request | |
| | | | |
| COPY /resource1 HTTP/1.1 | | COPY /resource1 HTTP/1.1 | |
| Host: www.example.com | | Host: www.example.com | |
| Destination: http://www.example.com/resource2 | | Destination: http://www.example.com/resource2 | |
| If: <http://www.example.com/resource1> | | If: <http://www.example.com/resource1> | |
| (<urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2> | | (<urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2> | |
|
| [W/"A weak ETag"]), (["strong ETag"]), | | [W/"A weak ETag"]) (["strong ETag"]) | |
| <http://www.bar.bar/random> | | <http://www.example.com/random> | |
| (["another strong ETag"]) | | (["another strong ETag"]) | |
| | | | |
| In this example http://www.example.com/resource1 is being copied to | | In this example http://www.example.com/resource1 is being copied to | |
| http://www.example.com/resource2. When the method is first applied | | http://www.example.com/resource2. When the method is first applied | |
| to http://www.example.com/resource1, resource1 must be in the state | | to http://www.example.com/resource1, resource1 must be in the state | |
| specified by "(<urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2> [W/"A | | specified by "(<urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2> [W/"A | |
| weak ETag"]) (["strong ETag"])", that is, it either must be locked | | weak ETag"]) (["strong ETag"])", that is, it either must be locked | |
| with a lock token of "urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2" | | with a lock token of "urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2" | |
| and have a weak entity tag W/"A weak ETag" or it must have a strong | | and have a weak entity tag W/"A weak ETag" or it must have a strong | |
| entity tag "strong ETag". | | entity tag "strong ETag". | |
| | | | |
| That is the only success condition since the resource | | That is the only success condition since the resource | |
|
| http://www.bar.bar/random never has the method applied to it (the | | http://www.example.com/random never has the method applied to it (the | |
| only other resource listed in the If header) and | | only other resource listed in the If header) and | |
| http://www.example.com/resource2 is not listed in the If header. | | http://www.example.com/resource2 is not listed in the If header. | |
| | | | |
|
| 9.5.3. Not Production | | 9.5.4. Not Production | |
| | | | |
| Every state token or ETag is either current, and hence describes the | | Every state token or ETag is either current, and hence describes the | |
| state of a resource, or is not current, and does not describe the | | state of a resource, or is not current, and does not describe the | |
| state of a resource. The boolean operation of matching a state token | | state of a resource. The boolean operation of matching a state token | |
| or ETag to the current state of a resource thus resolves to a true or | | or ETag to the current state of a resource thus resolves to a true or | |
| false value. The "Not" production is used to reverse that value. | | false value. The "Not" production is used to reverse that value. | |
| The scope of the not production is the state-token or entity-tag | | The scope of the not production is the state-token or entity-tag | |
| immediately following it. | | immediately following it. | |
| | | | |
| If: (Not <urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2> | | If: (Not <urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2> | |
| | | | |
| skipping to change at page 67, line 22 | | skipping to change at page 73, line 12 | |
| When submitted with a request, this If header requires that all | | When submitted with a request, this If header requires that all | |
| operand resources must not be locked with | | operand resources must not be locked with | |
| urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2 and must be locked with | | urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2 and must be locked with | |
| urn:uuid:58f202ac-22cf-11d1-b12d-002035b29092. | | urn:uuid:58f202ac-22cf-11d1-b12d-002035b29092. | |
| | | | |
| The Not production is particularly useful with the "<DAV:no-lock>" | | The Not production is particularly useful with the "<DAV:no-lock>" | |
| state token. The clause "Not <DAV:no-lock>" MUST evaluate to true. | | state token. The clause "Not <DAV:no-lock>" MUST evaluate to true. | |
| Thus, any "OR" statement containing the clause "Not <DAV:no-lock>" | | Thus, any "OR" statement containing the clause "Not <DAV:no-lock>" | |
| MUST also evaluate to true. | | MUST also evaluate to true. | |
| | | | |
|
| 9.5.4. Matching Function | | 9.5.5. Matching Function | |
| | | | |
| When performing If header processing, the definition of a matching | | When performing If header processing, the definition of a matching | |
| state token or entity tag is as follows. | | state token or entity tag is as follows. | |
| | | | |
| Identifying a resource: The resource is identified by the URI along | | Identifying a resource: The resource is identified by the URI along | |
| with the token, in tagged list production, or by the Request-URI in | | with the token, in tagged list production, or by the Request-URI in | |
| untagged list production. | | untagged list production. | |
| | | | |
| Matching entity tag: Where the entity tag matches an entity tag | | Matching entity tag: Where the entity tag matches an entity tag | |
| associated with the identified resource. | | associated with the identified resource. | |
| | | | |
| skipping to change at page 68, line 9 | | skipping to change at page 73, line 47 | |
| resource, which is the 'specs' collection identified by the URL in | | resource, which is the 'specs' collection identified by the URL in | |
| the tagged list production. If the 'specs' collection is not locked | | the tagged list production. If the 'specs' collection is not locked | |
| or has a lock with a different token, the request MUST fail. If the | | or has a lock with a different token, the request MUST fail. If the | |
| 'specs' collection is locked (depth infinity) with that lock token, | | 'specs' collection is locked (depth infinity) with that lock token, | |
| then this request could succeed, both because the If header evaluates | | then this request could succeed, both because the If header evaluates | |
| to true, and because the lock token for the lock affecting the | | to true, and because the lock token for the lock affecting the | |
| affected resource has been provided. Alternatively, a request where | | affected resource has been provided. Alternatively, a request where | |
| the 'rfc2518.txt' URL is associated with the lock token in the If | | the 'rfc2518.txt' URL is associated with the lock token in the If | |
| header could also succeed. | | header could also succeed. | |
| | | | |
|
| 9.5.5. If Header and Non-DAV Aware Proxies | | 9.5.6. If Header and Non-DAV Aware Proxies | |
| | | | |
| Non-DAV aware proxies will not honor the If header, since they will | | Non-DAV aware proxies will not honor the If header, since they will | |
| not understand the If header, and HTTP requires non-understood | | not understand the If header, and HTTP requires non-understood | |
| headers to be ignored. When communicating with HTTP/1.1 proxies, the | | headers to be ignored. When communicating with HTTP/1.1 proxies, the | |
| "Cache-Control: no-cache" request header MUST be used so as to | | "Cache-Control: no-cache" request header MUST be used so as to | |
| prevent the proxy from improperly trying to service the request from | | prevent the proxy from improperly trying to service the request from | |
|
| its cache. When dealing with HTTP/1.0 proxies the "Pragma: no- | | its cache. When dealing with HTTP/1.0 proxies the "Pragma: no-cache" | |
| cache" request header MUST be used for the same reason. | | request header MUST be used for the same reason. | |
| | | | |
| 9.6. Lock-Token Header | | 9.6. Lock-Token Header | |
| | | | |
| Lock-Token = "Lock-Token" ":" Coded-URL | | Lock-Token = "Lock-Token" ":" Coded-URL | |
| | | | |
| The Lock-Token request header is used with the UNLOCK method to | | The Lock-Token request header is used with the UNLOCK method to | |
| identify the lock to be removed. The lock token in the Lock-Token | | identify the lock to be removed. The lock token in the Lock-Token | |
| request header MUST identify a lock that contains the resource | | request header MUST identify a lock that contains the resource | |
| identified by Request-URI as a member. | | identified by Request-URI as a member. | |
| | | | |
| The Lock-Token response header is used with the LOCK method to | | The Lock-Token response header is used with the LOCK method to | |
| indicate the lock token created as a result of a successful LOCK | | indicate the lock token created as a result of a successful LOCK | |
| request to create a new lock. | | request to create a new lock. | |
| | | | |
| 9.7. Overwrite Header | | 9.7. Overwrite Header | |
| | | | |
| Overwrite = "Overwrite" ":" ("T" | "F") | | Overwrite = "Overwrite" ":" ("T" | "F") | |
| | | | |
| The Overwrite request header specifies whether the server should | | The Overwrite request header specifies whether the server should | |
|
| overwrite the state of a non-null destination resource during a COPY | | overwrite a resource mapped to the destination URL during a COPY or | |
| or MOVE. A value of "F" states that the server must not perform the | | MOVE. A value of "F" states that the server must not perform the | |
| COPY or MOVE operation if the state of the destination resource is | | COPY or MOVE operation if the state of the destination URL does map | |
| non-null. If the overwrite header is not included in a COPY or MOVE | | to a resource. If the overwrite header is not included in a COPY or | |
| request then the resource MUST treat the request as if it has an | | MOVE request then the resource MUST treat the request as if it has an | |
| overwrite header of value "T". While the Overwrite header appears to | | overwrite header of value "T". While the Overwrite header appears to | |
| duplicate the functionality of the If-Match: * header of HTTP/1.1, | | duplicate the functionality of the If-Match: * header of HTTP/1.1, | |
| If-Match applies only to the Request-URI, and not to the Destination | | If-Match applies only to the Request-URI, and not to the Destination | |
| of a COPY or MOVE. | | of a COPY or MOVE. | |
| | | | |
| If a COPY or MOVE is not performed due to the value of the Overwrite | | If a COPY or MOVE is not performed due to the value of the Overwrite | |
| header, the method MUST fail with a 412 (Precondition Failed) status | | header, the method MUST fail with a 412 (Precondition Failed) status | |
| code. | | code. | |
| | | | |
| All DAV compliant resources MUST support the Overwrite header. | | All DAV compliant resources MUST support the Overwrite header. | |
| | | | |
| 9.8. Timeout Request Header | | 9.8. Timeout Request Header | |
| | | | |
| TimeOut = "Timeout" ":" 1#TimeType | | TimeOut = "Timeout" ":" 1#TimeType | |
| TimeType = ("Second-" DAVTimeOutVal | "Infinite") | | TimeType = ("Second-" DAVTimeOutVal | "Infinite") | |
|
| DAVTimeOutVal = 1*digit | | ; No LWS allowed within TimeType | |
| | | DAVTimeOutVal = 1*DIGIT | |
| | | | |
| Clients may include Timeout request headers in their LOCK requests. | | Clients may include Timeout request headers in their LOCK requests. | |
| However, the server is not required to honor or even consider these | | However, the server is not required to honor or even consider these | |
| requests. Clients MUST NOT submit a Timeout request header with any | | requests. Clients MUST NOT submit a Timeout request header with any | |
| method other than a LOCK method. | | method other than a LOCK method. | |
| | | | |
| Timeout response values MUST use a Second value or Infinite. | | Timeout response values MUST use a Second value or Infinite. | |
| | | | |
| The "Second" TimeType specifies the number of seconds that will | | The "Second" TimeType specifies the number of seconds that will | |
| elapse between granting of the lock at the server, and the automatic | | elapse between granting of the lock at the server, and the automatic | |
| | | | |
| skipping to change at page 70, line 8 | | skipping to change at page 76, line 8 | |
| user may be planning on going off-line. | | user may be planning on going off-line. | |
| | | | |
| A client MUST NOT assume that just because the time-out has expired | | A client MUST NOT assume that just because the time-out has expired | |
| the lock has been lost. Likewise, a client MUST NOT assume that just | | the lock has been lost. Likewise, a client MUST NOT assume that just | |
| because the time-out has not expired, the lock still exists (and for | | because the time-out has not expired, the lock still exists (and for | |
| this reason, clients are strongly advised to use ETags as well). | | this reason, clients are strongly advised to use ETags as well). | |
| | | | |
| 10. Status Code Extensions to HTTP/1.1 | | 10. Status Code Extensions to HTTP/1.1 | |
| | | | |
| The following status codes are added to those defined in HTTP/1.1 | | The following status codes are added to those defined in HTTP/1.1 | |
|
| RFC2616 [6]. | | [RFC2616]. | |
| | | | |
| 10.1. 102 Processing | | | |
| | | | |
| The 102 (Processing) status code is an interim response used to | | | |
| inform the client that the server has accepted the complete request, | | | |
| but has not yet completed it. This status code SHOULD only be sent | | | |
| when the server has a reasonable expectation that the request will | | | |
| take significant time to complete. As guidance, if a method is | | | |
| taking longer than 20 seconds (a reasonable, but arbitrary value) to | | | |
| process the server SHOULD return a 102 (Processing) response. The | | | |
| server MUST send a final response after the request has been | | | |
| completed. | | | |
| | | | |
| Methods can potentially take a long period of time to process, | | | |
| especially methods that support the Depth header. In such cases the | | | |
| client may time-out the connection while waiting for a response. To | | | |
| prevent this the server may return a 102 (Processing) status code to | | | |
| indicate to the client that the server is still processing the | | | |
| method. | | | |
| | | | |
|
| 10.2. 207 Multi-Status | | 10.1. 207 Multi-Status | |
| | | | |
| The 207 (Multi-Status) status code provides status for multiple | | The 207 (Multi-Status) status code provides status for multiple | |
| independent operations (see Section 12 for more information). | | independent operations (see Section 12 for more information). | |
| | | | |
|
| 10.3. 422 Unprocessable Entity | | 10.2. 422 Unprocessable Entity | |
| | | | |
| The 422 (Unprocessable Entity) status code means the server | | The 422 (Unprocessable Entity) status code means the server | |
| understands the content type of the request entity (hence a | | understands the content type of the request entity (hence a | |
| 415(Unsupported Media Type) status code is inappropriate), and the | | 415(Unsupported Media Type) status code is inappropriate), and the | |
| syntax of the request entity is correct (thus a 400 (Bad Request) | | syntax of the request entity is correct (thus a 400 (Bad Request) | |
| status code is inappropriate) but was unable to process the contained | | status code is inappropriate) but was unable to process the contained | |
| instructions. For example, this error condition may occur if an XML | | instructions. For example, this error condition may occur if an XML | |
| request body contains well-formed (i.e., syntactically correct), but | | request body contains well-formed (i.e., syntactically correct), but | |
| semantically erroneous XML instructions. | | semantically erroneous XML instructions. | |
| | | | |
|
| 10.4. 423 Locked | | 10.3. 423 Locked | |
| | | | |
| The 423 (Locked) status code means the source or destination resource | | The 423 (Locked) status code means the source or destination resource | |
|
| of a method is locked. This response SHOULD contain the 'missing- | | of a method is locked. This response SHOULD contain the 'lock-token- | |
| lock-token' element and corresponding href in the error body. | | present' precondition element and corresponding 'href' in the error | |
| | | body. | |
| | | | |
|
| 10.5. 424 Failed Dependency | | 10.4. 424 Failed Dependency | |
| | | | |
| The 424 (Failed Dependency) status code means that the method could | | The 424 (Failed Dependency) status code means that the method could | |
| not be performed on the resource because the requested action | | not be performed on the resource because the requested action | |
| depended on another action and that action failed. For example, if a | | depended on another action and that action failed. For example, if a | |
| command in a PROPPATCH method fails then, at minimum, the rest of the | | command in a PROPPATCH method fails then, at minimum, the rest of the | |
| commands will also fail with 424 (Failed Dependency). | | commands will also fail with 424 (Failed Dependency). | |
| | | | |
|
| 10.6. 507 Insufficient Storage | | 10.5. 507 Insufficient Storage | |
| | | | |
| The 507 (Insufficient Storage) status code means the method could not | | The 507 (Insufficient Storage) status code means the method could not | |
| be performed on the resource because the server is unable to store | | be performed on the resource because the server is unable to store | |
| the representation needed to successfully complete the request. This | | the representation needed to successfully complete the request. This | |
| condition is considered to be temporary. If the request which | | condition is considered to be temporary. If the request which | |
| received this status code was the result of a user action, the | | received this status code was the result of a user action, the | |
| request MUST NOT be repeated until it is requested by a separate user | | request MUST NOT be repeated until it is requested by a separate user | |
| action. | | action. | |
| | | | |
| 11. Use of HTTP Status Codes | | 11. Use of HTTP Status Codes | |
| | | | |
|
| These HTTP codes are not redefined, but this section serves as a | | These HTTP codes are not redefined, but their use is somewhat | |
| reminder that these HTTP codes may be used in responses to WebDAV | | extended by WebDAV methods and requirements. In general, many HTTP | |
| methods and clients must be appropriately prepared to handle them. | | status codes can be used in response to any request, not just in | |
| | | cases described in this document. Note also that WebDAV servers are | |
| 11.1. 301 Moved Permanently | | known to use 300-level redirect responses (and early interoperability | |
| | | tests found clients unprepared to see those responses). | |
| A server MAY use this status code in response to any request. | | | |
| | | | |
| 11.2. 302 Found | | | |
| | | | |
| A server MAY use this status code in response to any request. | | | |
| | | | |
| 11.3. 400 Bad Request | | | |
| | | | |
| A server MAY use this status code in response to any request. Some | | | |
| possible reasons: | | | |
| | | | |
| o the Host header is missing in any request | | | |
| | | | |
| o The protocol version is HTTP/1.0 | | | |
| | | | |
| o Any header is improperly formatted | | | |
| | | | |
| o The request method line is improperly formatted | | | |
| | | | |
| 11.4. 403 Forbidden | | | |
| | | | |
| A server MAY use this status code in response to any request. An | | | |
| appropriate use example would be in response to a PUT request to a | | | |
| collection, if the server does not ever allow PUT to a collection. | | | |
| | | | |
| 11.5. 409 Conflict | | | |
| | | | |
| A server MAY use this status code in response to any request. In | | | |
| base WebDAV, the 409 Conflict is most typically returned when a | | | |
| method that attempts to create a new resource must fail, because one | | | |
| of the collections that resource depends on does not exist. However, | | | |
| other types of conflicts are defined in specifications extending | | | |
| RFC2518. | | | |
| | | | |
|
| 11.6. 412 Precondition Failed | | 11.1. 412 Precondition Failed | |
| | | | |
| Any request can contain a conditional header defined in HTTP (If- | | Any request can contain a conditional header defined in HTTP (If- | |
|
| Match, If-Modified-Since, etc.) or the "If" conditional header | | Match, If-Modified-Since, etc.) or the "If" or "Overwrite" | |
| defined in this specification. If the request contains a conditional | | conditional headers defined in this specification. If the request | |
| header, and if that condition fails to hold, then this error code | | contains a conditional header, and if that condition fails to hold, | |
| MUST be returned unless some other error is returned. On the other | | then this error code MUST be returned unless some other error is | |
| hand, if the client did not include a conditional header in the | | returned. On the other hand, if the client did not include a | |
| request, then the server MUST NOT use this error. | | conditional header in the request, then the server MUST NOT use this | |
| | | error. | |
| | | | |
|
| 11.7. 414 Request-URI Too Long | | 11.2. 414 Request-URI Too Long | |
| | | | |
| This status code is used in HTTP 1.1 only for Request-URIs, because | | This status code is used in HTTP 1.1 only for Request-URIs, because | |
| full URIs aren't used in other headers. WebDAV specifies full URLs | | full URIs aren't used in other headers. WebDAV specifies full URLs | |
|
| in other headers, therefore this error may be used if the URI is too | | in other headers, therefore this error MAY be used if the URI is too | |
| long in other locations as well. A server MAY use this status code | | long in other locations as well. | |
| in response to any request. | | | |
| | | | |
| 11.8. 503 Service Unavailable | | | |
| | | | |
| This status code is particularly useful to respond to requests that | | | |
| the server considers a denial-of-service attack, such as excessively | | | |
| large PROPFIND depth infinity requests or requests in quick | | | |
| succession. A server MAY use this status code in response to any | | | |
| request, provided that the request did not partially or completely | | | |
| succeed. | | | |
| | | | |
| 12. Multi-Status Response | | 12. Multi-Status Response | |
| | | | |
| A Multi-Status response contains one 'response' element for each | | A Multi-Status response contains one 'response' element for each | |
| resource in the scope of the request (in no required order) or may be | | resource in the scope of the request (in no required order) or may be | |
| empty if no resources match the request. The default 207 (Multi- | | empty if no resources match the request. The default 207 (Multi- | |
| Status) response body is a text/xml or application/xml HTTP entity | | Status) response body is a text/xml or application/xml HTTP entity | |
|
| that contains a single XML element called multistatus, which contains | | that contains a single XML element called 'multistatus', which | |
| a set of XML elements called response which contain 200, 300, 400, | | contains a set of XML elements called response which contain 200, | |
| and 500 series status codes generated during the method invocation. | | 300, 400, and 500 series status codes generated during the method | |
| 100 series status codes SHOULD NOT be recorded in a response XML | | invocation. 100 series status codes SHOULD NOT be recorded in a | |
| element. The 207 status code itself MUST NOT be considered a success | | 'response' XML element. The 207 status code itself MUST NOT be | |
| response, it is only completely successful if all response elements | | considered a success response, it is only completely successful if | |
| inside contain success status codes. | | all 'response' elements inside contain success status codes. | |
| | | | |
| The body of a 207 Multi-Status response MUST contain a URL associated | | The body of a 207 Multi-Status response MUST contain a URL associated | |
| with each specific status code, so that the client can tell whether | | with each specific status code, so that the client can tell whether | |
| the error occurred with the source resource, destination resource or | | the error occurred with the source resource, destination resource or | |
| some other resource in the scope of the request. | | some other resource in the scope of the request. | |
| | | | |
| 12.1. Response headers | | 12.1. Response headers | |
| | | | |
|
| Use of the Location header with the Multi-Status response is | | HTTP defines the Location header to indicate a preferred URL for the | |
| intentionally undefined. Note that this specification does not | | resource that was addressed in the Request-URI (e.g. in response to | |
| define a way to redirect requests for individual resources within the | | successful PUT requests or in redirect responses). However, use of | |
| scope of a Multi-Status response. The server MAY always redirect the | | this header creates ambiguity when there are URLs in the body of the | |
| entire request by responding with a 300 level status response instead | | response, as with Multi-Status. Thus, use of the Location header | |
| of a Multi-Status response. | | with the Multi-Status response is intentionally undefined. | |
| | | | |
|
| 12.2. URL handling | | 12.2. URL Handling | |
| | | | |
|
| When a Multi-Status body is returned in response to a PROPFIND or | | A Multi-Status body contains one or more 'response' elements. Each | |
| another request with a single scope, all URLs appearing in the body | | response element describes a resource, and has an 'href' element | |
| must be equal to or inside the request-URI, thus the URLs MAY be | | identifying the resource. The 'href' element MUST contain an | |
| absolute or MAY be relative. | | absolute URI or relative reference. It MUST NOT include "." or ".." | |
| | | as path elements. | |
| | | | |
|
| o If the URLs are absolute, then the server MUST ensure that the | | If a 'href' element contains a relative reference, it MUST be | |
| URLs have the same prefix (scheme, host, port, and path) as the | | resolved against the Request-URI. A relative reference MUST be an | |
| URL of the requested resource. | | absolute path (note that clients are not known to support relative | |
| | | paths). | |
| | | | |
|
| o If the URLs are relative, they MUST be resolved against the | | Identifiers for collections appearing in the results SHOULD end in a | |
| Request-URI. | | '/' character. | |
| | | | |
|
| When a Multi-Status body is returned in response to MOVE or COPY, | | If a server allows resource names to include characters that aren't | |
| relative URI resolution is ambiguous (the request had both a source | | legal in HTTP URL paths, these characters must be percent-encoded on | |
| and a destination URL). Thus, URLs appearing in the responses to | | the wire (see [RFC3986], section 2.1). For example, it is illegal to | |
| MOVE or COPY SHOULD be absolute and fully-qualified URLs. | | use a space character or double-quote in a URI. URIs appearing in | |
| | | PROPFIND or PROPPATCH XML bodies (or other XML marshalling defined in | |
| | | this specification) are still subject to all URI rules, including | |
| | | forbidden characters. | |
| | | | |
|
| Servers MUST NOT return "." or ".." within an absolute or relative | | 12.3. Handling redirected child resources | |
| URI returned within a Multi-Status response. | | | |
| | | | |
|
| URLs for collections appearing in the results SHOULD end in a '/' | | Redirect responses (300-303, 305 and 307) defined in HTTP 1.1 | |
| character. | | normally take a Location header to indicate the new URI for the | |
| | | single resource redirected from the Request-URI. Multi-Status | |
| | | responses contain many resource addresses, but the original | |
| | | definition in RFC2518 did not have any place for the server to | |
| | | provide the new URI for redirected resources. This specification | |
| | | does define a 'location' element for this information (see | |
| | | Section 13.9). Servers MUST use this new element with redirect | |
| | | responses in Multi-Status. | |
| | | | |
|
| If a server allows resource names to include characters that aren't | | Clients encountering redirected resources in Multi-Status MUST NOT | |
| legal in HTTP URL paths, these characters must be URI-escaped on the | | rely on the 'location' element being present with a new URI. If the | |
| wire. For example, it is illegal to use a space character or double- | | element is not present, the client MAY reissue the request to the | |
| quote in a URI [8]. URIs appearing in PROPFIND or PROPPATCH XML | | individual redirected resource, because the response to that request | |
| bodies (or other XML marshalling defined in this specification) are | | can be redirected with a Location header containing the new URI. | |
| still subject to all URI rules, including forbidden characters. | | | |
| | | | |
|
| 12.3. Internal Status Codes | | 12.4. Internal Status Codes | |
| | | | |
|
| Section 8.3.1, Section 8.2.2, Section 8.7.2, Section 8.9.3 and | | Section 8.3.1, Section 8.2.2, Section 8.7.1, Section 8.9.3 and | |
| Section 8.10.2 define various status codes used in Multi-Status | | Section 8.10.2 define various status codes used in Multi-Status | |
| responses. This specification does not define the meaning of other | | responses. This specification does not define the meaning of other | |
| status codes that could appear in these responses. | | status codes that could appear in these responses. | |
| | | | |
| 13. XML Element Definitions | | 13. XML Element Definitions | |
| | | | |
| In this section, the final line of each section gives the element | | In this section, the final line of each section gives the element | |
|
| type declaration using the format defined in XML [11]. The "Value" | | type declaration using the format defined in [XML]. The "Value" | |
| field, where present, specifies further restrictions on the allowable | | field, where present, specifies further restrictions on the allowable | |
| contents of the XML element using BNF (i.e., to further restrict the | | contents of the XML element using BNF (i.e., to further restrict the | |
| values of a PCDATA element). The "Extensibility" field discusses how | | values of a PCDATA element). The "Extensibility" field discusses how | |
| the element may be extended in the future (or in existing extensions | | the element may be extended in the future (or in existing extensions | |
| to WebDAV. | | to WebDAV. | |
| | | | |
| All of the elements defined here may be extended by the addition of | | All of the elements defined here may be extended by the addition of | |
|
| attributes and child elements not defined in this specification. | | attributes and child elements not defined in this specification. All | |
| | | elements defined here are in the "DAV:" namespace. | |
| | | | |
| 13.1. activelock XML Element | | 13.1. activelock XML Element | |
| | | | |
| Name: activelock | | Name: activelock | |
| | | | |
|
| Namespace: DAV: | | | |
| | | | |
| Purpose: Describes a lock on a resource. | | Purpose: Describes a lock on a resource. | |
| | | | |
| Extensibility: MAY be extended with additional child elements or | | Extensibility: MAY be extended with additional child elements or | |
| attributes which SHOULD be ignored if not recognized. | | attributes which SHOULD be ignored if not recognized. | |
| | | | |
| <!ELEMENT activelock (lockscope, locktype, depth, owner?, timeout?, | | <!ELEMENT activelock (lockscope, locktype, depth, owner?, timeout?, | |
| locktoken?, lockroot)> | | locktoken?, lockroot)> | |
| | | | |
|
| 13.2. depth XML Element | | 13.2. allprop XML Element | |
| | | | |
| Name: depth | | | |
| | | | |
| Namespace: DAV: | | | |
| | | | |
|
| Purpose: The value of the Depth header. | | Name: allprop | |
| | | | |
|
| Value: "0" | "1" | "infinity" | | Purpose: Specifies that all names and values of dead properties and | |
| | | the live properties defined by this document existing on the | |
| | | resource are to be returned. | |
| | | | |
|
| Extensibility: MAY be extended with attributes which SHOULD be | | Extensibility: Normally empty, but MAY be extended with additional | |
| ignored. | | child elements or attributes which SHOULD be ignored if not | |
| | | recognized. | |
| | | | |
|
| <!ELEMENT depth (#PCDATA) > | | <!ELEMENT allprop EMPTY > | |
| | | | |
|
| 13.3. locktoken XML Element | | 13.3. collection XML Element | |
| Name: locktoken | | | |
| | | | |
|
| Namespace: DAV: | | Name: collection | |
| | | Purpose: Identifies the associated resource as a collection. The | |
| | | DAV:resourcetype property of a collection resource MUST contain | |
| | | this element. It is normally empty but extensions may add sub- | |
| | | elements. | |
| | | | |
|
| Purpose: The lock token associated with a lock. | | Extensibility: MAY be extended with child elements or attributes | |
| | | which SHOULD be ignored if not recognized. | |
| | | | |
|
| Description: The href contains a single lock token URI which refers | | <!ELEMENT collection EMPTY > | |
| to the lock. | | | |
| | | | |
|
| Extensibility: MAY be extended with additional child elements or | | 13.4. dead-props XML Element | |
| attributes which SHOULD be ignored if not recognized. | | | |
| | | | |
|
| <!ELEMENT locktoken (href) > | | Name: dead-props | |
| | | | |
|
| 13.4. lockroot XML Element | | Purpose: Specifies that all dead properties, names and values, | |
| | | should be returned in the response. | |
| | | | |
|
| Name: lockroot | | Extensibility: Normally empty, but MAY be extended with additional | |
| | | child elements or attributes which SHOULD be ignored if not | |
| | | recognized. | |
| | | | |
|
| Namespace: DAV: | | <!ELEMENT dead-props EMPTY > | |
| | | | |
|
| Purpose: Contains the root URL of the lock, which is the URL through | | 13.5. depth XML Element | |
| which the resource was addressed in the LOCK request. | | | |
| | | | |
|
| Description: The href contains a URL with the address of the root of | | Name: depth | |
| the lock. The server SHOULD include this in all lockdiscovery | | | |
| property values and the response to LOCK requests. | | | |
| | | | |
|
| Extensibility: MAY be extended with additional child elements or | | Purpose: The value of the Depth header. | |
| attributes which SHOULD be ignored if not recognized. | | | |
| | | | |
|
| <!ELEMENT lockroot (href) > | | Value: "0" | "1" | "infinity" | |
| | | | |
|
| 13.5. timeout XML Element | | Extensibility: MAY be extended with attributes which SHOULD be | |
| | | ignored. | |
| | | | |
|
| Name: timeout | | <!ELEMENT depth (#PCDATA) > | |
| | | | |
|
| Namespace: DAV: | | 13.6. error XML Element | |
| | | | |
|
| Purpose: The number of seconds remaining before a lock expires. | | Name: error | |
| | | | |
|
| Value: TimeType (defined in Section 9.8). | | Purpose: Error responses, particularly 403 Forbidden and 409 | |
| | | Conflict, sometimes need more information to indicate what went | |
| | | wrong. When an error response contains a body in WebDAV, the body | |
| | | is in XML with the root element 'error'. The 'error' element | |
| | | SHOULD include a standard precondition element defined in this | |
| | | specification or another specification. The 'error' tag MAY | |
| | | include custom error tags (in custom XML namespaces) which a | |
| | | client can safely ignore. | |
| | | | |
|
| Extensibility: MAY be extended with attributes which SHOULD be | | Description: Contains any XML element | |
| ignored. | | | |
| | | | |
|
| <!ELEMENT timeout (#PCDATA) > | | Extensibility: Fully extensible with additional child elements or | |
| | | attributes which SHOULD be ignored if not recognized. | |
| | | | |
|
| 13.6. collection XML Element | | <!ELEMENT error ANY > | |
| | | | |
|
| Name: collection | | 13.7. exclusive XML Element | |
| | | | |
|
| Namespace: DAV: | | Name: exclusive | |
| | | | |
|
| Purpose: Identifies the associated resource as a collection. The | | Purpose: Specifies an exclusive lock | |
| resourcetype property of a collection resource MUST contain this | | | |
| element. It is normally empty but extensions may add sub- | | | |
| elements. | | | |
| | | | |
|
| Extensibility: MAY be extended with child elements or attributes | | Extensibility: Normally empty, but MAY be extended with additional | |
| which SHOULD be ignored if not recognized. | | child elements or attributes which SHOULD be ignored if not | |
| | | recognized. | |
| | | | |
|
| <!ELEMENT collection EMPTY > | | <!ELEMENT exclusive EMPTY > | |
| | | | |
|
| 13.7. href XML Element | | 13.8. href XML Element | |
| | | | |
| Name: href | | Name: href | |
| | | | |
|
| Namespace: DAV: | | Purpose: Identifies the content of the element as a URI or a | |
| | | relative reference. There may be limits on the value of 'href' | |
| Purpose: Identifies the content of the element as a URI. In many | | depending on the context of its use. Refer to the specification | |
| situations, this URI MUST be a HTTP URI, and furthermore, it MUST | | text where 'href' is used to see what limitations apply in each | |
| identify a WebDAV resource. There is one exception to this | | case. | |
| general rule in the lockdiscovery property, where the lock token | | | |
| (which is a URI but may not be a HTTP URI) is inside the href | | | |
| element. Other specifications SHOULD be explicit if the href | | | |
| element is to contain non-HTTP URIs. | | | |
| | | | |
|
| Value: URI (See section 3.2.1 of RFC2616 [6]) | | Value: URI (See section 3 of [RFC3986]) | |
| | | | |
| Extensibility: MAY be extended with attributes which SHOULD be | | Extensibility: MAY be extended with attributes which SHOULD be | |
|
| ignored. | | ignored if not recognized. | |
| | | | |
| <!ELEMENT href (#PCDATA)> | | <!ELEMENT href (#PCDATA)> | |
| | | | |
|
| 13.8. lockentry XML Element | | 13.9. location XML Element | |
| | | | |
|
| Name: lockentry | | Name: location | |
| | | | |
|
| Namespace: DAV: | | Purpose: HTTP defines the "Location" header (section 14.30) to | |
| | | provide the new URI in the response to a request for a single | |
| | | redirected resource. When a redirection status code is used in a | |
| | | Multi-Status response, this element MAY be used to provide that | |
| | | new URI. | |
| | | | |
| | | Description: Contains a single href element with the same value that | |
| | | would be used in a Location header. | |
| | | | |
| | | Extensibility: MAY be extended with additional child elements or | |
| | | attributes which SHOULD be ignored if not recognized. | |
| | | | |
| | | <!ELEMENT location (href)> | |
| | | | |
| | | 13.10. lockentry XML Element | |
| | | | |
| | | Name: lockentry | |
| | | | |
| Purpose: Defines the types of locks that can be used with the | | Purpose: Defines the types of locks that can be used with the | |
| resource. | | resource. | |
| | | | |
| Extensibility: MAY be extended with additional child elements or | | Extensibility: MAY be extended with additional child elements or | |
| attributes which SHOULD be ignored if not recognized. | | attributes which SHOULD be ignored if not recognized. | |
| | | | |
| <!ELEMENT lockentry (lockscope, locktype) > | | <!ELEMENT lockentry (lockscope, locktype) > | |
| | | | |
|
| 13.9. lockinfo XML Element | | 13.11. lockinfo XML Element | |
| | | | |
| Name: lockinfo | | Name: lockinfo | |
| | | | |
|
| Namespace: DAV: | | Purpose: The 'lockinfo' XML element is used with a LOCK method to | |
| | | | |
| Purpose: The lockinfo XML element is used with a LOCK method to | | | |
| specify the type of lock the client wishes to have created. | | specify the type of lock the client wishes to have created. | |
| | | | |
| Extensibility: MAY be extended with additional child elements or | | Extensibility: MAY be extended with additional child elements or | |
| attributes which SHOULD be ignored if not recognized. | | attributes which SHOULD be ignored if not recognized. | |
| | | | |
| <!ELEMENT lockinfo (lockscope, locktype, owner?) > | | <!ELEMENT lockinfo (lockscope, locktype, owner?) > | |
| | | | |
|
| 13.10. lockscope XML Element | | 13.12. lockroot XML Element | |
| | | | |
| Name: lockscope | | | |
| | | | |
|
| Namespace: DAV: | | Name: lockroot | |
| | | | |
|
| Purpose: Specifies whether a lock is an exclusive lock, or a shared | | Purpose: Contains the root URL of the lock, which is the URL through | |
| lock. | | which the resource was addressed in the LOCK request. | |
| | | | |
|
| Extensibility: SHOULD NOT be extended with child elements. MAY be | | Description: The href contains a HTTP URL with the address of the | |
| extended with attributes which SHOULD be ignored. | | root of the lock. The server SHOULD include this in all DAV: | |
| | | lockdiscovery property values and the response to LOCK requests. | |
| | | | |
|
| <!ELEMENT lockscope (exclusive | shared) > | | Extensibility: MAY be extended with additional child elements or | |
| | | attributes which SHOULD be ignored if not recognized. | |
| | | | |
|
| 13.11. exclusive XML Element | | <!ELEMENT lockroot (href) > | |
| | | | |
|
| Name: exclusive | | 13.13. lockscope XML Element | |
| | | | |
|
| Namespace: DAV: | | Name: lockscope | |
| | | | |
|
| Purpose: Specifies an exclusive lock | | Purpose: Specifies whether a lock is an exclusive lock, or a shared | |
| | | lock. | |
| | | | |
|
| Extensibility: Normally empty, but MAY be extended with additional | | Extensibility: SHOULD NOT be extended with child elements. MAY be | |
| child elements or attributes which SHOULD be ignored if not | | extended with attributes which SHOULD be ignored. | |
| recognized. | | | |
| | | | |
|
| <!ELEMENT exclusive EMPTY > | | <!ELEMENT lockscope (exclusive | shared) > | |
| | | | |
|
| 13.12. shared XML Element | | 13.14. locktoken XML Element | |
| | | | |
|
| Name: shared | | Name: locktoken | |
| | | | |
|
| Namespace: DAV: | | Purpose: The lock token associated with a lock. | |
| | | | |
|
| Purpose: Specifies a shared lock | | Description: The href contains a single lock token URI which refers | |
| | | to the lock. | |
| | | | |
|
| Extensibility: Normally empty, but MAY be extended with additional | | Extensibility: MAY be extended with additional child elements or | |
| child elements or attributes which SHOULD be ignored if not | | attributes which SHOULD be ignored if not recognized. | |
| recognized. | | | |
| | | | |
|
| <!ELEMENT shared EMPTY > | | <!ELEMENT locktoken (href) > | |
| | | | |
|
| 13.13. locktype XML Element | | 13.15. locktype XML Element | |
| | | | |
| Name: locktype | | Name: locktype | |
| | | | |
|
| Namespace: DAV: | | | |
| | | | |
| Purpose: Specifies the access type of a lock. At present, this | | Purpose: Specifies the access type of a lock. At present, this | |
| specification only defines one lock type, the write lock. | | specification only defines one lock type, the write lock. | |
| | | | |
| Extensibility: MAY be extended with additional child elements or | | Extensibility: MAY be extended with additional child elements or | |
| attributes which SHOULD be ignored if not recognized. | | attributes which SHOULD be ignored if not recognized. | |
| | | | |
| <!ELEMENT locktype (write) > | | <!ELEMENT locktype (write) > | |
| | | | |
|
| 13.14. write XML Element | | 13.16. multistatus XML Element | |
| | | | |
| Name: write | | | |
| | | | |
| Namespace: DAV: | | | |
| | | | |
| Purpose: Specifies a write lock. | | | |
| | | | |
| Extensibility: Normally empty, but MAY be extended with additional | | | |
| child elements or attributes which SHOULD be ignored if not | | | |
| recognized. | | | |
| | | | |
| <!ELEMENT write EMPTY > | | | |
| | | | |
| 13.15. multistatus XML Element | | | |
| | | | |
| Name: multistatus | | Name: multistatus | |
| | | | |
|
| Namespace: DAV: | | | |
| | | | |
| Purpose: Contains multiple response messages. | | Purpose: Contains multiple response messages. | |
| | | | |
|
| Description The responsedescription at the top level is used to | | Description The 'responsedescription' element at the top level is | |
| provide a general message describing the overarching nature of the | | used to provide a general message describing the overarching | |
| response. If this value is available an application may use it | | nature of the response. If this value is available an application | |
| instead of presenting the individual response descriptions | | may use it instead of presenting the individual response | |
| contained within the responses. | | descriptions contained within the responses. | |
| | | | |
| Extensibility: MAY be extended with additional child elements or | | Extensibility: MAY be extended with additional child elements or | |
| attributes which SHOULD be ignored if not recognized. | | attributes which SHOULD be ignored if not recognized. | |
| | | | |
| <!ELEMENT multistatus (response+, responsedescription?) > | | <!ELEMENT multistatus (response+, responsedescription?) > | |
| | | | |
|
| 13.16. response XML Element | | 13.17. owner XML Element | |
| | | | |
| Name: locktype | | | |
| | | | |
| Namespace: DAV: | | | |
| | | | |
| Purpose: Holds a single response describing the effect of a method | | | |
| on resource and/or its properties. | | | |
| | | | |
| Description: A particular href MUST NOT appear more than once as the | | | |
| child of a response XML element under a multistatus XML element. | | | |
| This requirement is necessary in order to keep processing costs | | | |
| for a response to linear time. Essentially, this prevents having | | | |
| to search in order to group together all the responses by href. | | | |
| There are, however, no requirements regarding ordering based on | | | |
| href values. | | | |
| | | | |
| Extensibility: MAY be extended with additional child elements or | | | |
| attributes which SHOULD be ignored if not recognized. | | | |
| | | | |
| <!ELEMENT response (href, ((href*, status)|(propstat+)), | | | |
| responsedescription? , location?) > | | | |
| | | | |
| 13.17. propstat XML Element | | | |
| | | | |
| Name: propstat | | | |
| | | | |
| Namespace: DAV: | | | |
| | | | |
| Purpose: Groups together a prop and status element that is | | | |
| associated with a particular href element. | | | |
| | | | |
| Description: The propstat XML element MUST contain one prop XML | | | |
| element and one status XML element. The contents of the prop XML | | | |
| element MUST only list the names of properties to which the result | | | |
| in the status element applies. | | | |
| | | | |
| Extensibility: MAY be extended with additional child elements or | | | |
| attributes which SHOULD be ignored if not recognized. | | | |
| | | | |
| <!ELEMENT propstat (prop, status, responsedescription?) > | | | |
| | | | |
| 13.18. status XML Element | | | |
| | | | |
| Name: status | | | |
| | | | |
| Namespace: DAV: | | | |
| | | | |
| Purpose: Holds a single HTTP status-line | | | |
| | | | |
| Value: status-line (status-line defined in RFC2616 [6] | | | |
| | | | |
| Extensibility: MAY be extended with attributes which SHOULD be | | | |
| ignored. | | | |
| | | | |
| <!ELEMENT status (#PCDATA) > | | | |
| | | | |
| 13.19. responsedescription XML Element | | | |
| | | | |
| Name: responsedescription | | | |
| | | | |
| Namespace: DAV: | | | |
| | | | |
| Purpose: Contains a message that can be displayed to the user | | | |
| explaining the nature of the response. | | | |
| | | | |
| Description: This XML element provides information suitable to be | | | |
| presented to a user. | | | |
| | | | |
| Extensibility: MAY be extended with attributes which SHOULD be | | | |
| ignored. | | | |
| | | | |
| <!ELEMENT responsedescription (#PCDATA) > | | | |
| | | | |
| 13.20. owner XML Element | | | |
| | | | |
| Name: owner | | Name: owner | |
| | | | |
|
| Namespace: DAV: | | | |
| | | | |
| Purpose: Provides information about the principal taking out a lock. | | Purpose: Provides information about the principal taking out a lock. | |
| | | | |
|
| Description The owner XML element provides information sufficient for | | Description Provides information sufficient for either directly | |
| either directly contacting a principal (such as a telephone number | | contacting a principal (such as a telephone number or Email URI), | |
| or Email URI), or for discovering the principal (such as the URL | | or for discovering the principal (such as the URL of a homepage) | |
| of a homepage) who owns a lock. This information is provided by | | who owns a lock. This information is provided by the client, and | |
| the client, and may only be altered by the server if the owner | | may only be altered by the server if the owner value provided by | |
| value provided by the client is empty. | | the client is empty. | |
| | | | |
| Extensibility MAY be extended with child elements, mixed content, | | Extensibility MAY be extended with child elements, mixed content, | |
| text content or attributes. Structured content, for example one | | text content or attributes. Structured content, for example one | |
|
| or more <href> child elements containing URLs, is RECOMMENDED. | | or more 'href' child elements containing URIs of any kind, is | |
| | | RECOMMENDED. | |
| | | | |
| <!ELEMENT owner ANY > | | <!ELEMENT owner ANY > | |
| | | | |
|
| 13.21. prop XML element | | 13.18. prop XML element | |
| | | | |
| Name: prop | | Name: prop | |
| | | | |
|
| Namespace: DAV: | | | |
| | | | |
| Purpose: Contains properties related to a resource. | | Purpose: Contains properties related to a resource. | |
| | | | |
|
| Description The prop XML element is a generic container for | | Description A generic container for properties defined on resources. | |
| properties defined on resources. All elements inside a prop XML | | All elements inside a 'prop' XML element MUST define properties | |
| element MUST define properties related to the resource. No other | | related to the resource. No other elements may be used inside of | |
| elements may be used inside of a prop element. | | a 'prop' element. | |
| | | | |
| Extensibility MAY be extended with attributes which SHOULD be ignored | | Extensibility MAY be extended with attributes which SHOULD be ignored | |
| if not recognized. Any child element of this element must be | | if not recognized. Any child element of this element must be | |
| considered to be a property name, however these are not restricted | | considered to be a property name, however these are not restricted | |
| to the property names defined in this document or other standards. | | to the property names defined in this document or other standards. | |
| | | | |
| <!ELEMENT prop ANY > | | <!ELEMENT prop ANY > | |
| | | | |
|
| 13.22. propertyupdate XML element | | 13.19. propertyupdate XML element | |
| | | | |
| Name: propertyupdate | | Name: propertyupdate | |
| | | | |
|
| Namespace: DAV: | | | |
| | | | |
| Purpose: Contains a request to alter the properties on a resource. | | Purpose: Contains a request to alter the properties on a resource. | |
| | | | |
| Description: This XML element is a container for the information | | Description: This XML element is a container for the information | |
| required to modify the properties on the resource. This XML | | required to modify the properties on the resource. This XML | |
| element is multi-valued. | | element is multi-valued. | |
| | | | |
| Extensibility: MAY be extended with additional child elements or | | Extensibility: MAY be extended with additional child elements or | |
| attributes which SHOULD be ignored if not recognized. | | attributes which SHOULD be ignored if not recognized. | |
| | | | |
| <!ELEMENT propertyupdate (remove | set)+ > | | <!ELEMENT propertyupdate (remove | set)+ > | |
| | | | |
|
| | | 13.20. propfind XML Element | |
| | | | |
| | | Name: propfind | |
| | | | |
| | | Purpose: Specifies the properties to be returned from a PROPFIND | |
| | | method. Four special elements are specified for use with | |
| | | 'propfind': 'prop', 'dead-props', 'allprop' and 'propname'. If | |
| | | 'prop' is used inside 'propfind' it MUST NOT contain property | |
| | | values. | |
| | | | |
| | | Extensibility: MAY be extended with additional child elements or | |
| | | attributes which SHOULD be ignored if not recognized, as long as | |
| | | it still contains one of the required elements. | |
| | | | |
| | | <!ELEMENT propfind ( propname | allprop | (prop, dead-props?) ) > | |
| | | | |
| | | 13.21. propname XML Element | |
| | | Name: propname | |
| | | | |
| | | Purpose: Specifies that only a list of property names on the | |
| | | resource is to be returned. | |
| | | | |
| | | Extensibility: Normally empty, but MAY be extended with additional | |
| | | child elements or attributes which SHOULD be ignored if not | |
| | | recognized. | |
| | | | |
| | | <!ELEMENT propname EMPTY > | |
| | | | |
| | | 13.22. propstat XML Element | |
| | | | |
| | | Name: propstat | |
| | | | |
| | | Purpose: Groups together a prop and status element that is | |
| | | associated with a particular 'href' element. | |
| | | | |
| | | Description: The propstat XML element MUST contain one prop XML | |
| | | element and one status XML element. The contents of the prop XML | |
| | | element MUST only list the names of properties to which the result | |
| | | in the status element applies. | |
| | | | |
| | | Extensibility: MAY be extended with additional child elements or | |
| | | attributes which SHOULD be ignored if not recognized. | |
| | | | |
| | | <!ELEMENT propstat (prop, status, responsedescription?) > | |
| | | | |
| 13.23. remove XML element | | 13.23. remove XML element | |
| | | | |
| Name: remove | | Name: remove | |
| | | | |
|
| Namespace: DAV: | | | |
| | | | |
| Purpose: Lists the DAV properties to be removed from a resource. | | Purpose: Lists the DAV properties to be removed from a resource. | |
| | | | |
| Description: Remove instructs that the properties specified in prop | | Description: Remove instructs that the properties specified in prop | |
| should be removed. Specifying the removal of a property that does | | should be removed. Specifying the removal of a property that does | |
|
| not exist is not an error. All the XML elements in a prop XML | | not exist is not an error. All the XML elements in a 'prop' XML | |
| element inside of a remove XML element MUST be empty, as only the | | element inside of a 'remove' XML element MUST be empty, as only | |
| names of properties to be removed are required. | | the names of properties to be removed are required. | |
| | | | |
| Extensibility: MAY be extended with additional child elements or | | Extensibility: MAY be extended with additional child elements or | |
| attributes which SHOULD be ignored if not recognized. | | attributes which SHOULD be ignored if not recognized. | |
| | | | |
| <!ELEMENT remove (prop) > | | <!ELEMENT remove (prop) > | |
| | | | |
|
| 13.24. set XML element | | 13.24. response XML Element | |
| | | Name: response | |
| Name: set | | | |
| | | | |
| Namespace: DAV: | | | |
| | | | |
|
| Purpose: Lists the DAV property values to be set for a resource. | | Purpose: Holds a single response describing the effect of a method | |
| | | on resource and/or its properties. | |
| | | | |
|
| Description: The set XML element MUST contain only a prop XML | | Description: The 'href' element contains a HTTP URL pointing to a | |
| element. The elements contained by the prop XML element inside | | WebDAV resource when used in the 'response' container. A | |
| the set XML element MUST specify the name and value of properties | | particular 'href' value MUST NOT appear more than once as the | |
| that are set on the resource identified by Request-URI. If a | | child of a 'response' XML element under a 'multistatus' XML | |
| property already exists then its value is replaced. Language | | element. This requirement is necessary in order to keep | |
| tagging information appearing in the scope of the prop element (in | | processing costs for a response to linear time. Essentially, this | |
| the "xml:lang" attribute, if present) MUST be persistently stored | | prevents having to search in order to group together all the | |
| along with the property, and MUST be subsequently retrievable | | responses by 'href'. There are, however, no requirements | |
| using PROPFIND. | | regarding ordering based on 'href' values. | |
| | | | |
| Extensibility: MAY be extended with additional child elements or | | Extensibility: MAY be extended with additional child elements or | |
| attributes which SHOULD be ignored if not recognized. | | attributes which SHOULD be ignored if not recognized. | |
| | | | |
|
| <!ELEMENT set (prop) > | | <!ELEMENT response (href, ((href*, status)|(propstat+)), | |
| | | responsedescription? , location?) > | |
| | | | |
|
| 13.25. propfind XML Element | | 13.25. responsedescription XML Element | |
| | | | |
|
| Name: propfind | | Name: responsedescription | |
| | | | |
|
| Namespace: DAV: | | Purpose: Contains information about a status response within a | |
| | | Multi-Status. | |
| | | | |
|
| Purpose: Specifies the properties to be returned from a PROPFIND | | Description: This XML element provides either information suitable | |
| method. Four special elements are specified for use with | | to be presented to a user (PCDATA) or a machine readable error | |
| propfind: prop, dead-props, allprop and propname. If prop is used | | code. | |
| inside propfind it MUST NOT contain property values. | | | |
| | | | |
|
| Extensibility: MAY be extended with additional child elements or | | Extensibility: MAY be extended with additional attributes which | |
| attributes which SHOULD be ignored if not recognized, as long as | | SHOULD be ignored if not recognized. | |
| it still contains one of the required elements. | | | |
| | | | |
|
| <!ELEMENT propfind (prop | dead-props | propname | allprop) > | | <!ELEMENT responsedescription (#PCDATA | error) > | |
| | | | |
|
| 13.26. allprop XML Element | | 13.26. set XML element | |
| | | | |
|
| Name: allprop | | Name: set | |
| | | | |
|
| Namespace: DAV: | | Purpose: Lists the DAV property values to be set for a resource. | |
| | | | |
|
| Purpose: The allprop XML element specifies that all names and values | | Description: The 'set' XML element MUST contain only a prop XML | |
| of dead properties and the live properties defined by this | | element. The elements contained by the prop XML element inside | |
| document existing on the resource are to be returned. | | the 'set' XML element MUST specify the name and value of | |
| | | properties that are set on the resource identified by Request-URI. | |
| | | | |
|
| Extensibility: Normally empty, but MAY be extended with additional | | If a property already exists then its value is replaced. Language | |
| child elements or attributes which SHOULD be ignored if not | | tagging information appearing in the scope of the 'prop' element | |
| recognized. | | (in the "xml:lang" attribute, if present) MUST be persistently | |
| | | stored along with the property, and MUST be subsequently | |
| | | retrievable using PROPFIND. | |
| | | | |
|
| <!ELEMENT allprop EMPTY > | | Extensibility: MAY be extended with additional child elements or | |
| | | attributes which SHOULD be ignored if not recognized. | |
| | | | |
|
| 13.27. propname XML Element | | <!ELEMENT set (prop) > | |
| Name: propname | | | |
| | | | |
|
| Namespace: DAV: | | 13.27. shared XML Element | |
| | | | |
|
| Purpose: The propname XML element specifies that only a list of | | Name: shared | |
| property names on the resource is to be returned. | | | |
| | | Purpose: Specifies a shared lock | |
| | | | |
| Extensibility: Normally empty, but MAY be extended with additional | | Extensibility: Normally empty, but MAY be extended with additional | |
| child elements or attributes which SHOULD be ignored if not | | child elements or attributes which SHOULD be ignored if not | |
| recognized. | | recognized. | |
| | | | |
|
| <!ELEMENT propname EMPTY > | | <!ELEMENT shared EMPTY > | |
| | | | |
|
| 13.28. dead-props XML Element | | 13.28. status XML Element | |
| | | | |
|
| Name: dead-props | | Name: status | |
| | | | |
|
| Namespace: DAV: | | Purpose: Holds a single HTTP status-line | |
| | | | |
|
| Purpose: The dead-props XML element specifies that all dead | | Value: status-line (status-line defined in Section 6.1 of [RFC2616]) | |
| properties, names and values, should be returned in the response. | | | |
| | | | |
|
| Extensibility: Normally empty, but MAY be extended with additional | | Extensibility: MAY be extended with attributes which SHOULD be | |
| child elements or attributes which SHOULD be ignored if not | | ignored. | |
| recognized. | | | |
| | | | |
|
| <!ELEMENT dead-props EMPTY > | | <!ELEMENT status (#PCDATA) > | |
| | | | |
|
| 13.29. error XML Element | | 13.29. timeout XML Element | |
| | | | |
|
| Name: error | | Name: timeout | |
| | | | |
|
| Namespace: DAV: | | Purpose: The number of seconds remaining before a lock expires. | |
| | | | |
|
| Purpose: Error responses, particularly 403 Forbidden and 409 | | Value: TimeType (defined in Section 9.8). | |
| Conflict, sometimes need more information to indicate what went | | | |
| wrong. When an error response contains a body in WebDAV, the body | | | |
| is in XML with the root element 'error'. The 'error' tag SHOULD | | | |
| include a standard error tag defined in this specification or | | | |
| another specification. The 'error' tag MAY include custom error | | | |
| tags (in custom namespaces) which a client can safely ignore. | | | |
| | | | |
|
| Description: Contains any XML element | | Extensibility: MAY be extended with attributes which SHOULD be | |
| | | ignored. | |
| | | | |
|
| Extensibility: Fully extensible with additional child elements or | | <!ELEMENT timeout (#PCDATA) > | |
| attributes which SHOULD be ignored if not recognized. | | | |
| | | | |
|
| <!ELEMENT error ANY > | | 13.30. write XML Element | |
| | | | |
| | | Name: write | |
| | | | |
| | | Purpose: Specifies a write lock. | |
| | | | |
| | | Extensibility: Normally empty, but MAY be extended with additional | |
| | | child elements or attributes which SHOULD be ignored if not | |
| | | recognized. | |
| | | | |
| | | <!ELEMENT write EMPTY > | |
| | | | |
| 14. DAV Properties | | 14. DAV Properties | |
| | | | |
| For DAV properties, the name of the property is also the same as the | | For DAV properties, the name of the property is also the same as the | |
| name of the XML element that contains its value. In the section | | name of the XML element that contains its value. In the section | |
| below, the final line of each section gives the element type | | below, the final line of each section gives the element type | |
|
| declaration using the format defined in XML [11]. The "Value" field, | | declaration using the format defined in [XML]. The "Value" field, | |
| where present, specifies further restrictions on the allowable | | where present, specifies further restrictions on the allowable | |
| contents of the XML element using BNF (i.e., to further restrict the | | contents of the XML element using BNF (i.e., to further restrict the | |
| values of a PCDATA element). Note that a resource may have only one | | values of a PCDATA element). Note that a resource may have only one | |
| value for a property of a given name, so the property may only show | | value for a property of a given name, so the property may only show | |
| up once in PROPFIND responses or PROPPATCH requests. | | up once in PROPFIND responses or PROPPATCH requests. | |
| | | | |
| Some property values are calculated by the server and it is not | | Some property values are calculated by the server and it is not | |
| appropriate to allow client changes, thus they are protected. | | appropriate to allow client changes, thus they are protected. | |
| Existing server implementations already have different sets of | | Existing server implementations already have different sets of | |
| RFC2518 properties protected, but clients can have some expectations | | RFC2518 properties protected, but clients can have some expectations | |
| which properties are normally protected. The value of a protected | | which properties are normally protected. The value of a protected | |
| property may not be changed even by a user with permission to edit | | property may not be changed even by a user with permission to edit | |
| other properties. The value of an unprotected property may be | | other properties. The value of an unprotected property may be | |
| changed by some users with appropriate permissions. | | changed by some users with appropriate permissions. | |
| | | | |
|
| | | COPY and MOVE behavior refers to local COPY and MOVE operations. | |
| | | | |
| | | For properties defined based on HTTP GET response headers (DAV:get*), | |
| | | the value could include LWS as defined in [RFC2616], section 4.2. | |
| | | Server implementors SHOULD NOT include extra LWS in these values, | |
| | | however client implementors MUST be prepared to handle extra LWS. | |
| | | | |
| 14.1. creationdate Property | | 14.1. creationdate Property | |
| | | | |
| Name: creationdate | | Name: creationdate | |
| | | | |
|
| Namespace: DAV: | | | |
| | | | |
| Purpose: Records the time and date the resource was created. | | Purpose: Records the time and date the resource was created. | |
| | | | |
|
| Value: date-time (defined in RFC3339 [7], see the ABNF in section | | Value: date-time (defined in [RFC3339], see the ABNF in section | |
| 5.6.) | | 5.6.) | |
| | | | |
|
| Protected: MAY be protected. Some servers allow creationdate to be | | Protected: MAY be protected. Some servers allow DAV:creationdate to | |
| changed to reflect the time the document was created if that is | | be changed to reflect the time the document was created if that is | |
| more meaningful to the user (rather than the time it was | | more meaningful to the user (rather than the time it was | |
| uploaded). Thus, clients SHOULD NOT use this property in | | uploaded). Thus, clients SHOULD NOT use this property in | |
|
| synchronization logic (use getetag instead). | | synchronization logic (use DAV:getetag instead). | |
| | | | |
| COPY/MOVE behaviour: This property value SHOULD be kept during a | | COPY/MOVE behaviour: This property value SHOULD be kept during a | |
| MOVE operation, but is normally re-initialized when a resource is | | MOVE operation, but is normally re-initialized when a resource is | |
| created with a COPY. It should not be set in a COPY. | | created with a COPY. It should not be set in a COPY. | |
| | | | |
|
| Description: The creationdate property should be defined on all DAV | | Description: The DAV:creationdate property SHOULD be defined on all | |
| compliant resources. If present, it contains a timestamp of the | | DAV compliant resources. If present, it contains a timestamp of | |
| moment when the resource was created (i.e., the moment it had non- | | the moment when the resource was created. Servers that are | |
| null state). | | incapable of persistently recording the creation date SHOULD | |
| | | instead leave it undefined (i.e. report "Not Found") | |
| | | | |
| Extensibility: MAY contain attributes which SHOULD be ignored if not | | Extensibility: MAY contain attributes which SHOULD be ignored if not | |
| recognized. | | recognized. | |
| | | | |
| <!ELEMENT creationdate (#PCDATA) > | | <!ELEMENT creationdate (#PCDATA) > | |
| | | | |
| 14.2. displayname Property | | 14.2. displayname Property | |
| | | | |
| Name: displayname | | Name: displayname | |
| | | | |
|
| Namespace: DAV: | | | |
| | | | |
| Purpose: Provides a name for the resource that is suitable for | | Purpose: Provides a name for the resource that is suitable for | |
| presentation to a user. | | presentation to a user. | |
| | | | |
| Value: Any text | | Value: Any text | |
| | | | |
|
| Protected: Possibly | | Protected: SHOULD NOT be protected | |
| | | | |
|
| COPY/MOVE behaviour: This property value SHOULD be preserved in | | COPY/MOVE behaviour: This property value SHOULD be preserved in COPY | |
| local COPY and MOVE operations. It MAY be attempted to be set in | | and MOVE operations. | |
| a COPY operation to a remote server. | | | |
| | | | |
|
| Description: The displayname property should be defined on all DAV | | Description: The DAV:displayname property should be defined on all | |
| compliant resources. If present, the property contains a | | DAV compliant resources. If present, the property contains a | |
| description of the resource that is suitable for presentation to a | | description of the resource that is suitable for presentation to a | |
| user. | | user. | |
| | | | |
| Extensibility: MAY contain attributes which SHOULD be ignored if not | | Extensibility: MAY contain attributes which SHOULD be ignored if not | |
| recognized. | | recognized. | |
| | | | |
| <!ELEMENT displayname (#PCDATA) > | | <!ELEMENT displayname (#PCDATA) > | |
| | | | |
| 14.3. getcontentlanguage Property | | 14.3. getcontentlanguage Property | |
| | | | |
| Name: getcontentlanguage | | Name: getcontentlanguage | |
| | | | |
|
| Namespace: DAV: | | | |
| | | | |
| Purpose: Contains the Content-Language header returned by a GET | | Purpose: Contains the Content-Language header returned by a GET | |
| without accept headers | | without accept headers | |
| | | | |
| Value: language-tag (language-tag is defined in section 14.13 of | | Value: language-tag (language-tag is defined in section 14.13 of | |
|
| RFC2616 [6]) | | [RFC2616]) | |
| | | | |
| Protected: SHOULD NOT be protected, so that clients can reset the | | Protected: SHOULD NOT be protected, so that clients can reset the | |
| language. | | language. | |
| | | | |
|
| COPY/MOVE behaviour: This property value SHOULD be preserved in | | COPY/MOVE behaviour: This property value SHOULD be preserved in COPY | |
| local COPY and MOVE operations. It SHOULD be attempted to be set | | and MOVE operations. | |
| in a COPY operation to a remote server. | | | |
| | | | |
|
| Description: The getcontentlanguage property MUST be defined on any | | Description: The DAV:getcontentlanguage property MUST be defined on | |
| DAV compliant resource that returns the Content-Language header on | | any DAV compliant resource that returns the Content-Language | |
| a GET. | | header on a GET. | |
| | | | |
| Extensibility: MAY contain attributes which SHOULD be ignored if not | | Extensibility: MAY contain attributes which SHOULD be ignored if not | |
| recognized. | | recognized. | |
| | | | |
| <!ELEMENT getcontentlanguage (#PCDATA) > | | <!ELEMENT getcontentlanguage (#PCDATA) > | |
| | | | |
| 14.4. getcontentlength Property | | 14.4. getcontentlength Property | |
| | | | |
| Name: getcontentlength | | Name: getcontentlength | |
| | | | |
|
| Namespace: DAV: | | | |
| | | | |
| Purpose: Contains the Content-Length header returned by a GET | | Purpose: Contains the Content-Length header returned by a GET | |
| without accept headers. | | without accept headers. | |
| | | | |
|
| Value: content-length (see section 14.14 of RFC2616 [6]) | | Value: content-length (see section 14.14 of [RFC2616]) | |
| | | | |
| Protected: SHOULD be protected so clients cannot set to misleading | | Protected: SHOULD be protected so clients cannot set to misleading | |
| values | | values | |
| | | | |
|
| Description: The getcontentlength property MUST be defined on any | | Description: The DAV:getcontentlength property MUST be defined on | |
| DAV compliant resource that returns the Content-Length header in | | any DAV compliant resource that returns the Content-Length header | |
| response to a GET. | | in response to a GET. | |
| | | | |
| COPY/MOVE behaviour: This property value is dependent on the size of | | COPY/MOVE behaviour: This property value is dependent on the size of | |
| the destination resource, not the value of the property on the | | the destination resource, not the value of the property on the | |
| source resource. | | source resource. | |
| | | | |
| Extensibility: MAY contain attributes which SHOULD be ignored if not | | Extensibility: MAY contain attributes which SHOULD be ignored if not | |
| recognized. | | recognized. | |
| | | | |
| <!ELEMENT getcontentlength (#PCDATA) > | | <!ELEMENT getcontentlength (#PCDATA) > | |
| | | | |
| 14.5. getcontenttype Property | | 14.5. getcontenttype Property | |
| | | | |
| Name: getcontenttype | | Name: getcontenttype | |
| | | | |
|
| Namespace: DAV: | | | |
| | | | |
| Purpose: Contains the Content-Type header returned by a GET without | | Purpose: Contains the Content-Type header returned by a GET without | |
| accept headers. | | accept headers. | |
| | | | |
|
| Value: media-type (defined in section 3.7 of RFC2616 [6]) | | Value: media-type (defined in section 3.7 of [RFC2616]) | |
| | | | |
| Protected: SHOULD NOT be protected, so clients may fix this value | | Protected: SHOULD NOT be protected, so clients may fix this value | |
| | | | |
|
| COPY/MOVE behaviour: This property value SHOULD be preserved in | | COPY/MOVE behaviour: This property value SHOULD be preserved in COPY | |
| local COPY and MOVE operations. In a remote COPY operation that | | and MOVE operations. | |
| is implemented through a PUT request, the PUT request must have | | | |
| the appropriate Content-Type header. | | | |
| | | | |
|
| Description: This getcontenttype property MUST be defined on any DAV | | Description: This property MUST be defined on any DAV compliant | |
| compliant resource that returns the Content-Type header in | | resource that returns the Content-Type header in response to a | |
| response to a GET. | | GET. | |
| | | | |
| Extensibility: MAY contain attributes which SHOULD be ignored if not | | Extensibility: MAY contain attributes which SHOULD be ignored if not | |
| recognized. | | recognized. | |
| | | | |
| <!ELEMENT getcontenttype (#PCDATA) > | | <!ELEMENT getcontenttype (#PCDATA) > | |
| | | | |
| 14.6. getetag Property | | 14.6. getetag Property | |
| | | | |
| Name: getetag | | Name: getetag | |
| | | | |
|
| Namespace: DAV: | | | |
| | | | |
| Purpose: Contains the ETag header returned by a GET without accept | | Purpose: Contains the ETag header returned by a GET without accept | |
| headers. | | headers. | |
| | | | |
|
| Value: entity-tag (defined in section 3.11 of RFC2616 [6]) | | Value: entity-tag (defined in section 3.11 of [RFC2616]) | |
| | | | |
| Protected: MUST be protected because this value is created and | | Protected: MUST be protected because this value is created and | |
| controlled by the server. | | controlled by the server. | |
| | | | |
| COPY/MOVE behaviour: This property value is dependent on the final | | COPY/MOVE behaviour: This property value is dependent on the final | |
| state of the destination resource, not the value of the property | | state of the destination resource, not the value of the property | |
| on the source resource. | | on the source resource. | |
| | | | |
| Description: The getetag property MUST be defined on any DAV | | Description: The getetag property MUST be defined on any DAV | |
| compliant resource that returns the Etag header. Refer to RFC2616 | | compliant resource that returns the Etag header. Refer to RFC2616 | |
| | | | |
| skipping to change at page 91, line 11 | | skipping to change at page 95, line 4 | |
| for a complete definition of the semantics of an ETag. Note that | | for a complete definition of the semantics of an ETag. Note that | |
| changes in properties or lock state MUST not cause a resource's | | changes in properties or lock state MUST not cause a resource's | |
| ETag to change. | | ETag to change. | |
| | | | |
| Extensibility: MAY contain attributes which SHOULD be ignored if not | | Extensibility: MAY contain attributes which SHOULD be ignored if not | |
| recognized. | | recognized. | |
| | | | |
| <!ELEMENT getetag (#PCDATA) > | | <!ELEMENT getetag (#PCDATA) > | |
| | | | |
| 14.7. getlastmodified Property | | 14.7. getlastmodified Property | |
|
| | | | |
| Name: getlastmodified | | Name: getlastmodified | |
| | | | |
|
| Namespace: DAV: | | | |
| | | | |
| Purpose: Contains the Last-Modified header returned by a GET method | | Purpose: Contains the Last-Modified header returned by a GET method | |
| without accept headers. | | without accept headers. | |
| | | | |
|
| Value: rfc1123-date (defined in section 3.3.1 of RFC2616 [6]) | | Value: rfc1123-date (defined in section 3.3.1 of [RFC2616]) | |
| | | | |
| Protected: SHOULD be protected because some clients may rely on the | | Protected: SHOULD be protected because some clients may rely on the | |
| value for appropriate caching behavior, or on the value of the | | value for appropriate caching behavior, or on the value of the | |
| Last-Modified header to which this property is linked. | | Last-Modified header to which this property is linked. | |
| | | | |
| COPY/MOVE behaviour: This property value is dependent on the last | | COPY/MOVE behaviour: This property value is dependent on the last | |
| modified date of the destination resource, not the value of the | | modified date of the destination resource, not the value of the | |
| property on the source resource. Note that some server | | property on the source resource. Note that some server | |
| implementations use the file system date modified value for the | | implementations use the file system date modified value for the | |
|
| 'getlastmodified' value, and this is preserved in a MOVE even when | | DAV:getlastmodified value, and this is preserved in a MOVE even | |
| the HTTP Last-Modified value SHOULD change. Thus, clients cannot | | when the HTTP Last-Modified value SHOULD change. Thus, clients | |
| rely on this value for caching and SHOULD use ETags. | | cannot rely on this value for caching and SHOULD use ETags. | |
| | | | |
| Description: Note that the last-modified date on a resource SHOULD | | Description: Note that the last-modified date on a resource SHOULD | |
| only reflect changes in the body (the GET responses) of the | | only reflect changes in the body (the GET responses) of the | |
| resource. A change in a property only SHOULD NOT cause the last- | | resource. A change in a property only SHOULD NOT cause the last- | |
| modified date to change, because clients MAY rely on the last- | | modified date to change, because clients MAY rely on the last- | |
| modified date to know when to overwrite the existing body. The | | modified date to know when to overwrite the existing body. The | |
|
| getlastmodified property MUST be defined on any DAV compliant | | DAV:getlastmodified property MUST be defined on any DAV compliant | |
| resource that returns the Last- Modified header in response to a | | resource that returns the Last- Modified header in response to a | |
| GET. | | GET. | |
| | | | |
| Extensibility: MAY contain attributes which SHOULD be ignored if not | | Extensibility: MAY contain attributes which SHOULD be ignored if not | |
| recognized. | | recognized. | |
| | | | |
| <!ELEMENT getlastmodified (#PCDATA) > | | <!ELEMENT getlastmodified (#PCDATA) > | |
| | | | |
| 14.8. lockdiscovery Property | | 14.8. lockdiscovery Property | |
|
| Name: lockdiscovery | | | |
| | | | |
|
| Namespace: DAV: | | Name: lockdiscovery | |
| | | | |
| Purpose: Describes the active locks on a resource | | Purpose: Describes the active locks on a resource | |
| | | | |
| Protected: MUST be protected. Clients change the list of locks | | Protected: MUST be protected. Clients change the list of locks | |
| through LOCK and UNLOCK, not through PROPPATCH. | | through LOCK and UNLOCK, not through PROPPATCH. | |
| | | | |
| COPY/MOVE behaviour: The value of this property depends on the lock | | COPY/MOVE behaviour: The value of this property depends on the lock | |
| state of the destination, not on the locks of the source resource. | | state of the destination, not on the locks of the source resource. | |
| Recall that locks are not moved in a MOVE operation. | | Recall that locks are not moved in a MOVE operation. | |
| | | | |
|
| Description: The lockdiscovery property returns a listing of who has | | Description: Returns a listing of who has a lock, what type of lock | |
| a lock, what type of lock he has, the timeout type and the time | | he has, the timeout type and the time remaining on the timeout, | |
| remaining on the timeout, and the associated lock token. If there | | and the associated lock token. If there are no locks, but the | |
| are no locks, but the server supports locks, the property will be | | server supports locks, the property will be present but contain | |
| present but contain zero 'activelock' elements. If there is one | | zero 'activelock' elements. If there is one or more lock, an | |
| or more lock, an 'activelock' element appears for each lock on the | | 'activelock' element appears for each lock on the resource. | |
| resource. | | | |
| | | | |
| Extensibility: MAY be extended with additional child elements or | | Extensibility: MAY be extended with additional child elements or | |
| attributes which SHOULD be ignored if not recognized. | | attributes which SHOULD be ignored if not recognized. | |
| | | | |
| <!ELEMENT lockdiscovery (activelock)* > | | <!ELEMENT lockdiscovery (activelock)* > | |
| | | | |
| 14.8.1. Example - Retrieving the lockdiscovery Property | | 14.8.1. Example - Retrieving the lockdiscovery Property | |
|
| | | | |
| >>Request | | >>Request | |
| | | | |
| PROPFIND /container/ HTTP/1.1 | | PROPFIND /container/ HTTP/1.1 | |
| Host: www.example.com | | Host: www.example.com | |
| Content-Length: xxxx | | Content-Length: xxxx | |
|
| Content-Type: text/xml; charset="utf-8" | | Content-Type: application/xml; charset="utf-8" | |
| | | | |
| <?xml version="1.0" encoding="utf-8" ?> | | <?xml version="1.0" encoding="utf-8" ?> | |
| <D:propfind xmlns:D='DAV:'> | | <D:propfind xmlns:D='DAV:'> | |
| <D:prop><D:lockdiscovery/></D:prop> | | <D:prop><D:lockdiscovery/></D:prop> | |
| </D:propfind> | | </D:propfind> | |
|
| | | | |
| >>Response | | >>Response | |
| | | | |
| HTTP/1.1 207 Multi-Status | | HTTP/1.1 207 Multi-Status | |
|
| Content-Type: text/xml; charset="utf-8" | | Content-Type: application/xml; charset="utf-8" | |
| Content-Length: xxxx | | Content-Length: xxxx | |
| | | | |
| <?xml version="1.0" encoding="utf-8" ?> | | <?xml version="1.0" encoding="utf-8" ?> | |
| <D:multistatus xmlns:D='DAV:'> | | <D:multistatus xmlns:D='DAV:'> | |
| <D:response> | | <D:response> | |
| <D:href>http://www.example.com/container/</D:href> | | <D:href>http://www.example.com/container/</D:href> | |
| <D:propstat> | | <D:propstat> | |
| <D:prop> | | <D:prop> | |
| <D:lockdiscovery> | | <D:lockdiscovery> | |
| <D:activelock> | | <D:activelock> | |
| <D:locktype><D:write/></D:locktype> | | <D:locktype><D:write/></D:locktype> | |
| <D:lockscope><D:exclusive/></D:lockscope> | | <D:lockscope><D:exclusive/></D:lockscope> | |
| <D:depth>0</D:depth> | | <D:depth>0</D:depth> | |
| <D:owner>Jane Smith</D:owner> | | <D:owner>Jane Smith</D:owner> | |
| <D:timeout>Infinite</D:timeout> | | <D:timeout>Infinite</D:timeout> | |
| <D:locktoken> | | <D:locktoken> | |
|
| <D:href>urn:uuid:f81de2ad-7f3d-a1b2-4f3c | | <D:href | |
| -00a0c91a9d76</D:href> | | >urn:uuid:f81de2ad-7f3d-a1b2-4f3c-00a0c91a9d76</D:href> | |
| </D:locktoken> | | </D:locktoken> | |
| <D:lockroot> | | <D:lockroot> | |
| <D:href>http://www.example.com/container/</D:href> | | <D:href>http://www.example.com/container/</D:href> | |
| </D:lockroot> | | </D:lockroot> | |
| </D:activelock> | | </D:activelock> | |
| </D:lockdiscovery> | | </D:lockdiscovery> | |
| </D:prop> | | </D:prop> | |
| <D:status>HTTP/1.1 200 OK</D:status> | | <D:status>HTTP/1.1 200 OK</D:status> | |
| </D:propstat> | | </D:propstat> | |
| </D:response> | | </D:response> | |
| </D:multistatus> | | </D:multistatus> | |
| | | | |
| This resource has a single exclusive write lock on it, with an | | This resource has a single exclusive write lock on it, with an | |
| infinite timeout. | | infinite timeout. | |
| | | | |
| 14.9. resourcetype Property | | 14.9. resourcetype Property | |
| | | | |
| Name: resourcetype | | Name: resourcetype | |
| | | | |
|
| Namespace: DAV: | | | |
| | | | |
| Purpose: Specifies the nature of the resource. | | Purpose: Specifies the nature of the resource. | |
| | | | |
| Protected: SHOULD be protected. Resource type is generally decided | | Protected: SHOULD be protected. Resource type is generally decided | |
| through the operation creating the resource (MKCOL vs PUT), not by | | through the operation creating the resource (MKCOL vs PUT), not by | |
| PROPPATCH. | | PROPPATCH. | |
| | | | |
| COPY/MOVE behaviour: Generally a COPY/MOVE of a resource results in | | COPY/MOVE behaviour: Generally a COPY/MOVE of a resource results in | |
|
| the same type of resource at the destination. In a remote COPY, | | the same type of resource at the destination. | |
| the source server SHOULD NOT attempt to set this property. | | | |
| | | | |
|
| Description: The resourcetype property MUST be defined on all DAV | | Description: MUST be defined on all DAV compliant resources. The | |
| compliant resources. The default value is empty. | | default value is empty. | |
| | | | |
| Extensibility: MAY be extended with any child elements or attributes | | Extensibility: MAY be extended with any child elements or attributes | |
| which SHOULD be ignored if not recognized. If the element | | which SHOULD be ignored if not recognized. If the element | |
| contains the 'collection' child element plus additional | | contains the 'collection' child element plus additional | |
| unrecognized elements/attributes, it should generally be treated | | unrecognized elements/attributes, it should generally be treated | |
| as a collection. If the element contains no recognized child | | as a collection. If the element contains no recognized child | |
|
| elements it should be treated as a non- collection WebDAV- | | elements it should be treated as a non-collection WebDAV-compliant | |
| compliant resource. | | resource. | |
| | | | |
| Example: (fictional example to show extensibility) | | Example: (fictional example to show extensibility) | |
| | | | |
| <x:resourcetype xmlns:x="DAV:"> | | <x:resourcetype xmlns:x="DAV:"> | |
| <x:collection/> | | <x:collection/> | |
| <f:search-results xmlns:f="http://www.example.com/ns"/> | | <f:search-results xmlns:f="http://www.example.com/ns"/> | |
| </x:resourcetype> | | </x:resourcetype> | |
| | | | |
| 14.10. supportedlock Property | | 14.10. supportedlock Property | |
| | | | |
| Name: supportedlock | | Name: supportedlock | |
| | | | |
|
| Namespace: DAV: | | | |
| | | | |
| Purpose: To provide a listing of the lock capabilities supported by | | Purpose: To provide a listing of the lock capabilities supported by | |
| the resource. | | the resource. | |
| | | | |
| Protected: MUST be protected. Servers determine what lock | | Protected: MUST be protected. Servers determine what lock | |
| mechanisms are supported, not clients. | | mechanisms are supported, not clients. | |
| | | | |
| COPY/MOVE behaviour: This property value is dependent on the kind of | | COPY/MOVE behaviour: This property value is dependent on the kind of | |
| locks supported at the destination, not on the value of the | | locks supported at the destination, not on the value of the | |
| property at the source resource. Servers attempting to COPY to a | | property at the source resource. Servers attempting to COPY to a | |
| destination should not attempt to set this property at the | | destination should not attempt to set this property at the | |
| destination. | | destination. | |
| | | | |
|
| Description: The supportedlock property of a resource returns a | | Description: Returns a listing of the combinations of scope and | |
| listing of the combinations of scope and access types which may be | | access types which may be specified in a lock request on the | |
| specified in a lock request on the resource. Note that the actual | | resource. Note that the actual contents are themselves controlled | |
| contents are themselves controlled by access controls so a server | | by access controls so a server is not required to provide | |
| is not required to provide information the client is not | | information the client is not authorized to see. | |
| authorized to see. | | | |
| | | | |
| Extensibility: MAY be extended with any child elements or attributes | | Extensibility: MAY be extended with any child elements or attributes | |
| which SHOULD be ignored if not recognized. | | which SHOULD be ignored if not recognized. | |
| | | | |
| <!ELEMENT supportedlock (lockentry)* > | | <!ELEMENT supportedlock (lockentry)* > | |
| | | | |
|
| 14.10.1. Example - Retrieving the supportedlock Property | | 14.10.1. Example - Retrieving the DAV:supportedlock Property | |
| | | | |
| >>Request | | >>Request | |
| | | | |
| PROPFIND /container/ HTTP/1.1 | | PROPFIND /container/ HTTP/1.1 | |
| Host: www.example.com | | Host: www.example.com | |
| Content-Length: xxxx | | Content-Length: xxxx | |
|
| Content-Type: text/xml; charset="utf-8" | | Content-Type: application/xml; charset="utf-8" | |
| | | | |
| <?xml version="1.0" encoding="utf-8" ?> | | <?xml version="1.0" encoding="utf-8" ?> | |
| <D:propfind xmlns:D="DAV:"> | | <D:propfind xmlns:D="DAV:"> | |
| <D:prop><D:supportedlock/></D:prop> | | <D:prop><D:supportedlock/></D:prop> | |
| </D:propfind> | | </D:propfind> | |
| | | | |
| >>Response | | >>Response | |
| | | | |
| HTTP/1.1 207 Multi-Status | | HTTP/1.1 207 Multi-Status | |
|
| Content-Type: text/xml; charset="utf-8" | | Content-Type: application/xml; charset="utf-8" | |
| Content-Length: xxxx | | Content-Length: xxxx | |
| | | | |
| <?xml version="1.0" encoding="utf-8" ?> | | <?xml version="1.0" encoding="utf-8" ?> | |
| <D:multistatus xmlns:D="DAV:"> | | <D:multistatus xmlns:D="DAV:"> | |
| <D:response> | | <D:response> | |
| <D:href>http://www.example.com/container/</D:href> | | <D:href>http://www.example.com/container/</D:href> | |
| <D:propstat> | | <D:propstat> | |
| <D:prop> | | <D:prop> | |
| <D:supportedlock> | | <D:supportedlock> | |
| <D:lockentry> | | <D:lockentry> | |
| | | | |
| skipping to change at page 97, line 10 | | skipping to change at page 100, line 10 | |
| <D:status>HTTP/1.1 200 OK</D:status> | | <D:status>HTTP/1.1 200 OK</D:status> | |
| </D:propstat> | | </D:propstat> | |
| </D:response> | | </D:response> | |
| </D:multistatus> | | </D:multistatus> | |
| | | | |
| 15. Precondition/postcondition XML elements | | 15. Precondition/postcondition XML elements | |
| | | | |
| The numerical status codes used in HTTP responses are not | | The numerical status codes used in HTTP responses are not | |
| sufficiently granular or informative for all purposes. Some | | sufficiently granular or informative for all purposes. Some | |
| extensions to HTTP have used the error response body along with some | | extensions to HTTP have used the error response body along with some | |
|
| status codes in order to provide additiona machine-readable response | | status codes in order to provide additional machine-readable response | |
| detail. The machine-readable codes are XML elements classified as | | detail. The machine-readable codes are XML elements classified as | |
|
| preconditions (generally client error or failure to meet the | | preconditions and postconditions. Even if clients do not | |
| conditions in order for the request to be considered) and | | automatically recognize the error bodies they can be quite useful in | |
| postconditions (generally server error or failure to respond | | | |
| successfully to an otherwise valid request). The precondition or | | | |
| postcondition XML element appears inside an 'error' element which is | | | |
| the root of the XML body of the response. The 'error' root element | | | |
| or the precondition or postcondition elements MAY contain additional | | | |
| XML elements or attributes not defined in this specification. | | | |
| | | | |
| XML elements in error response bodies were not used in RFC2518, but | | | |
| were introduced in RFC2518bis. Thus, use of these informative | | | |
| elements is RECOMMENDED. Even if clients do not automatically | | | |
| recognize the error bodies they can be quite useful in | | | |
| interoperability testing and debugging. | | interoperability testing and debugging. | |
| | | | |
|
| Name: external-entities-forbidden | | A "precondition" of a method describes the state of the server that | |
| | | must be true for that method to be performed. A "postcondition" of a | |
| | | method describes the state of the server that must be true after that | |
| | | method has been completed. If a method precondition or postcondition | |
| | | for a request is not satisfied, the response status of the request | |
| | | MUST be either 403 (Forbidden) if the request should not be repeated | |
| | | because it will always fail, or 409 (Conflict) if it is expected that | |
| | | the user might be able to resolve the conflict and resubmit the | |
| | | request. | |
| | | | |
|
| Namespace: DAV: | | The XML element associated with the precondition or postcondition | |
| | | MUST be returned as the child of a top-level DAV:error element in the | |
| | | response body, unless otherwise negotiated by the request. In a 207 | |
| | | Multi-Status response, the DAV:error element would appear in the | |
| | | appropriate DAV:responsedescription element. | |
| | | | |
| | | Some useful preconditions and postconditions have been defined in | |
| | | other specifications extending this one, such as [RFC3744] (see | |
| | | particularly section 7.1.1), [RFC3253], and [RFC3648]. | |
| | | | |
| | | All these elements are in the "DAV:" namespace. | |
| | | | |
| | | Name: no-external-entities | |
| | | | |
| Use with: 403 Forbidden | | Use with: 403 Forbidden | |
| | | | |
| Purpose: (precondition) -- If the server rejects a client request | | Purpose: (precondition) -- If the server rejects a client request | |
| because the request body contains an external entity, the server | | because the request body contains an external entity, the server | |
| SHOULD use this error. | | SHOULD use this error. | |
| | | | |
|
| <!ELEMENT external-entities-forbidden EMPTY > | | <!ELEMENT no-external-entities EMPTY > | |
| | | | |
| Name: requesturi-must-match-lock-token | | | |
| | | | |
| Namespace: DAV: | | | |
| | | | |
|
| | | Name: lock-token-matches-request-uri | |
| Use with: 400 Bad Request | | Use with: 400 Bad Request | |
| | | | |
| Purpose: (precondition) -- A request may include a Lock-Token header | | Purpose: (precondition) -- A request may include a Lock-Token header | |
| to identify a lock for the purposes of an operation such as | | to identify a lock for the purposes of an operation such as | |
| refresh LOCK or UNLOCK. However, if the Request-URI doe not fall | | refresh LOCK or UNLOCK. However, if the Request-URI doe not fall | |
| within the scope of the lock identified by the token, the server | | within the scope of the lock identified by the token, the server | |
| SHOULD use this error. The lock may have a scope that does not | | SHOULD use this error. The lock may have a scope that does not | |
| include the Request-URI, or the lock could have disappeared, or | | include the Request-URI, or the lock could have disappeared, or | |
| the token may be invalid. | | the token may be invalid. | |
| | | | |
|
| <!ELEMENT requesturi-must-match-lock-token EMPTY > | | <!ELEMENT lock-token-matches-request-uri EMPTY > | |
| | | | |
| Name: missing-lock-token | | | |
| | | | |
| Namespace: DAV: | | | |
| | | | |
| Use with: 400 Bad Request | | | |
| | | | |
| Purpose: (precondition) -- If the server rejects a request because | | | |
| the request MUST have a lock token and is missing the lock token | | | |
| header or header value (e.g. on an UNLOCK request), the server | | | |
| SHOULD use this error. The 'missing-lock-token' element MUST | | | |
| contain at least one URL of a locked resource for which a lock | | | |
| token was expected. | | | |
| | | | |
| <!ELEMENT missing-lock-token href* > | | | |
| | | | |
| Name: live-properties-not-preserved | | | |
| | | | |
|
| Namespace: DAV: | | Name: preserved-live-properties | |
| | | | |
| Use with: 409 Conflict | | Use with: 409 Conflict | |
| | | | |
| Purpose: (postcondition) -- The server received an otherwise-valid | | Purpose: (postcondition) -- The server received an otherwise-valid | |
| MOVE or COPY request, but cannot maintain the live properties with | | MOVE or COPY request, but cannot maintain the live properties with | |
| the same behavior at the destination. It may be that the server | | the same behavior at the destination. It may be that the server | |
| only supports some live properties in some parts of the | | only supports some live properties in some parts of the | |
| repository, or simply has an internal error. | | repository, or simply has an internal error. | |
| | | | |
|
| <!ELEMENT live-properties-not-preserved EMPTY > | | <!ELEMENT preserved-live-properties EMPTY > | |
| | | | |
| Name: read-only-property | | | |
| | | | |
|
| Namespace: DAV: | | Name: writable-property | |
| | | | |
| Use with: 403 Forbidden | | Use with: 403 Forbidden | |
| | | | |
| Purpose: (precondition) -- The client attempted to set a read-only | | Purpose: (precondition) -- The client attempted to set a read-only | |
|
| property in a PROPPATCH (such as 'getetag'). | | property in a PROPPATCH (such as DAV:getetag). | |
| | | | |
| <!ELEMENT read-only-property EMPTY > | | | |
| | | | |
|
| Name: propfind-infinite-depth-forbidden | | <!ELEMENT writable-property EMPTY > | |
| | | | |
|
| Namespace: DAV: | | Name: propfind-finite-depth | |
| | | | |
| Use with: 403 Forbidden | | Use with: 403 Forbidden | |
| | | | |
| Purpose: (precondition) -- This server does not allow infinite-depth | | Purpose: (precondition) -- This server does not allow infinite-depth | |
| PROPFIND requests on collections. | | PROPFIND requests on collections. | |
| | | | |
|
| <!ELEMENT propfind-infinite-depth-forbidden EMPTY > | | <!ELEMENT propfind-finite-depth EMPTY > | |
| | | | |
| Name: need-privileges | | | |
| | | | |
| Namespace: DAV: | | | |
| | | | |
| Use with: 403 Forbidden | | | |
| | | | |
| Purpose: (precondition) -- The currently authenticated user simply | | | |
| does not have the privileges required to do the requested | | | |
| operation (e.g. UNLOCK a lock created by someone else). | | | |
| | | | |
| <!ELEMENT need-privileges EMPTY > | | | |
| | | | |
| Name: missing-lock-token | | | |
| | | | |
| Namespace: DAV: | | | |
| | | | |
|
| Use with: 423 Locked | | Name: lock-token-present | |
| | | | |
|
| | | Use with: 4xx responses, e.g. 400 Bad Request or 423 Locked | |
| Purpose: (precondition) -- The request could not succeed because a | | Purpose: (precondition) -- The request could not succeed because a | |
| lock token should have been provided. This element, if present, | | lock token should have been provided. This element, if present, | |
|
| MUST contain the URL of a locked resource that prevented the | | MUST contain at least one URL of a locked resource that prevented | |
| request. In cases of MOVE, COPY and DELETE where collection locks | | the request. In cases of MOVE, COPY and DELETE where collection | |
| are involved, it can be difficult for the client to find out which | | locks are involved, it can be difficult for the client to find out | |
| locked resource made the request fail -- but the server is only | | which locked resource made the request fail -- but the server is | |
| resonsible for returning one such locked resource. The server MAY | | only resonsible for returning one such locked resource. The | |
| return every locked resource that prevented the request from | | server MAY return every locked resource that prevented the request | |
| succeeding if it knows them all. | | from succeeding if it knows them all. | |
| | | | |
|
| <!ELEMENT missing-lock-token (href+) > | | <!ELEMENT lock-token-present (href+) > | |
| | | | |
| 16. Instructions for Processing XML in DAV | | 16. Instructions for Processing XML in DAV | |
| | | | |
| All DAV compliant resources MUST ignore any unknown XML element and | | All DAV compliant resources MUST ignore any unknown XML element and | |
| all its children encountered while processing a DAV method that uses | | all its children encountered while processing a DAV method that uses | |
| XML as its command language. | | XML as its command language. | |
| | | | |
| This restriction also applies to the processing, by clients, of DAV | | This restriction also applies to the processing, by clients, of DAV | |
| property values where unknown XML elements SHOULD be ignored unless | | property values where unknown XML elements SHOULD be ignored unless | |
| the property's schema declares otherwise. | | the property's schema declares otherwise. | |
| | | | |
| skipping to change at page 101, line 19 | | skipping to change at page 104, line 19 | |
| executing OPTIONS on the resource, and examining the "DAV" header | | executing OPTIONS on the resource, and examining the "DAV" header | |
| which is returned. Note particularly that resources are spoken of as | | which is returned. Note particularly that resources are spoken of as | |
| being compliant, rather than servers. That is because theoretically | | being compliant, rather than servers. That is because theoretically | |
| some resources on a server could support different feature sets. | | some resources on a server could support different feature sets. | |
| E.g. a server could have a sub-repository where an advanced feature | | E.g. a server could have a sub-repository where an advanced feature | |
| like server was supported, even if that feature was not supported on | | like server was supported, even if that feature was not supported on | |
| all servers. | | all servers. | |
| | | | |
| Since this document describes extensions to the HTTP/1.1 protocol, | | Since this document describes extensions to the HTTP/1.1 protocol, | |
| minimally all DAV compliant resources, clients, and proxies MUST be | | minimally all DAV compliant resources, clients, and proxies MUST be | |
|
| compliant with RFC2616 [6]. | | compliant with [RFC2616]. | |
| | | | |
| A resource that is class 2 compliant must also be class 1 compliant, | | A resource that is class 2 compliant must also be class 1 compliant, | |
| and a resource that is compliant with "bis" must also be class 1 | | and a resource that is compliant with "bis" must also be class 1 | |
| compliant. | | compliant. | |
| | | | |
| 17.1. Class 1 | | 17.1. Class 1 | |
| | | | |
| A class 1 compliant resource MUST meet all "MUST" requirements in all | | A class 1 compliant resource MUST meet all "MUST" requirements in all | |
| sections of this document. | | sections of this document. | |
| | | | |
| Class 1 compliant resources MUST return, at minimum, the value "1" in | | Class 1 compliant resources MUST return, at minimum, the value "1" in | |
| the DAV header on all responses to the OPTIONS method. | | the DAV header on all responses to the OPTIONS method. | |
| | | | |
| 17.2. Class 2 | | 17.2. Class 2 | |
| | | | |
| A class 2 compliant resource MUST meet all class 1 requirements and | | A class 2 compliant resource MUST meet all class 1 requirements and | |
|
| support the LOCK method, the supportedlock property, the | | support the LOCK method, the DAV:supportedlock property, the DAV: | |
| lockdiscovery property, the Time-Out response header and the Lock- | | lockdiscovery property, the Time-Out response header and the Lock- | |
| Token request header. A class "2" compliant resource SHOULD also | | Token request header. A class "2" compliant resource SHOULD also | |
| support the Time-Out request header and the owner XML element. | | support the Time-Out request header and the owner XML element. | |
| | | | |
| Class 2 compliant resources MUST return, at minimum, the values "1" | | Class 2 compliant resources MUST return, at minimum, the values "1" | |
| and "2" in the DAV header on all responses to the OPTIONS method. | | and "2" in the DAV header on all responses to the OPTIONS method. | |
| | | | |
| 17.3. Class 'bis' | | 17.3. Class 'bis' | |
| | | | |
| A resource can explicitly advertise its support for the revisions to | | A resource can explicitly advertise its support for the revisions to | |
| RFC2518 made in this document. In particular, this allows clients to | | RFC2518 made in this document. In particular, this allows clients to | |
| use the Force-Authentication header on requests. Class 1 must be | | use the Force-Authentication header on requests. Class 1 must be | |
| supported as well. Class 2 MAY be supported. | | supported as well. Class 2 MAY be supported. | |
| | | | |
|
| A resource that supports bis MUST support: | | A resource that supports "bis" MUST support: | |
| | | | |
| o the Force-Authentication header. | | o the Force-Authentication header. | |
| | | | |
| o Any behavior that it supports, in the manner specified in this | | o Any behavior that it supports, in the manner specified in this | |
| document, rather than in the manner specified in RFC2518, for all | | document, rather than in the manner specified in RFC2518, for all | |
| client requests. A server MAY use an older behavior for specific | | client requests. A server MAY use an older behavior for specific | |
| clients that are discovered to have interoperability problems with | | clients that are discovered to have interoperability problems with | |
| the requirements of this specification, but MUST NOT use an older | | the requirements of this specification, but MUST NOT use an older | |
| behavior indiscriminately. | | behavior indiscriminately. | |
| | | | |
| Example: | | Example: | |
| | | | |
| DAV: 1, bis | | DAV: 1, bis | |
| | | | |
| 18. Internationalization Considerations | | 18. Internationalization Considerations | |
| | | | |
| In the realm of internationalization, this specification complies | | In the realm of internationalization, this specification complies | |
|
| with the IETF Character Set Policy RFC2277 [6]. In this | | with the IETF Character Set Policy [RFC2277]. In this specification, | |
| specification, human-readable fields can be found either in the value | | human-readable fields can be found either in the value of a property, | |
| of a property, or in an error message returned in a response entity | | or in an error message returned in a response entity body. In both | |
| body. In both cases, the human-readable content is encoded using | | cases, the human-readable content is encoded using XML, which has | |
| XML, which has explicit provisions for character set tagging and | | explicit provisions for character set tagging and encoding, and | |
| encoding, and requires that XML processors read XML elements encoded, | | requires that XML processors read XML elements encoded, at minimum, | |
| at minimum, using the UTF-8 RFC2279 [4] and UTF-16 encodings of the | | using the UTF-8 [RFC3629] and UTF-16 encodings of the ISO 10646 | |
| ISO 10646 multilingual plane. XML examples in this specification | | multilingual plane. XML examples in this specification demonstrate | |
| demonstrate use of the charset parameter of the Content-Type header, | | use of the charset parameter of the Content-Type header, as defined | |
| as defined in RFC2376 [13], as well as the XML declarations which | | in [RFC3023], as well as the XML declarations which provide charset | |
| provide charset identification information for MIME and XML | | identification information for MIME and XML processors. | |
| processors. | | | |
| | | | |
| XML also provides a language tagging capability for specifying the | | XML also provides a language tagging capability for specifying the | |
| language of the contents of a particular XML element. The "xml:lang" | | language of the contents of a particular XML element. The "xml:lang" | |
| attribute appears on an XML element to identify the language of its | | attribute appears on an XML element to identify the language of its | |
|
| content and attributes. See XML [11] for definitions of values and | | content and attributes. See [XML] for definitions of values and | |
| scoping. | | scoping. | |
| | | | |
| WebDAV applications MUST support the character set tagging, character | | WebDAV applications MUST support the character set tagging, character | |
| set encoding, and the language tagging functionality of the XML | | set encoding, and the language tagging functionality of the XML | |
| specification. Implementors of WebDAV applications are strongly | | specification. Implementors of WebDAV applications are strongly | |
|
| encouraged to read "XML Media Types" RFC2376 [13] for instruction on | | encouraged to read "XML Media Types" [RFC3023] for instruction on | |
| which MIME media type to use for XML transport, and on use of the | | which MIME media type to use for XML transport, and on use of the | |
| charset parameter of the Content-Type header. | | charset parameter of the Content-Type header. | |
| | | | |
| Names used within this specification fall into four categories: names | | Names used within this specification fall into four categories: names | |
| of protocol elements such as methods and headers, names of XML | | of protocol elements such as methods and headers, names of XML | |
| elements, names of properties, and names of conditions. Naming of | | elements, names of properties, and names of conditions. Naming of | |
| protocol elements follows the precedent of HTTP, using English names | | protocol elements follows the precedent of HTTP, using English names | |
| encoded in USASCII for methods and headers. Since these protocol | | encoded in USASCII for methods and headers. Since these protocol | |
| elements are not visible to users, and are simply long token | | elements are not visible to users, and are simply long token | |
| identifiers, they do not need to support multiple languages. | | identifiers, they do not need to support multiple languages. | |
| | | | |
| skipping to change at page 105, line 10 | | skipping to change at page 108, line 10 | |
| | | | |
| Since interoperation of clients and servers does not require locale | | Since interoperation of clients and servers does not require locale | |
| information, this specification does not specify any mechanism for | | information, this specification does not specify any mechanism for | |
| transmission of this information. | | transmission of this information. | |
| | | | |
| 19. Security Considerations | | 19. Security Considerations | |
| | | | |
| This section is provided to detail issues concerning security | | This section is provided to detail issues concerning security | |
| implications of which WebDAV applications need to be aware. | | implications of which WebDAV applications need to be aware. | |
| | | | |
|
| All of the security considerations of HTTP/1.1 (discussed in RFC2616 | | All of the security considerations of HTTP/1.1 (discussed in | |
| [6]) and XML (discussed in RFC2376 [13]) also apply to WebDAV. In | | [RFC2616]) and XML (discussed in [RFC3023]) also apply to WebDAV. In | |
| addition, the security risks inherent in remote authoring require | | addition, the security risks inherent in remote authoring require | |
| stronger authentication technology, introduce several new privacy | | stronger authentication technology, introduce several new privacy | |
| concerns, and may increase the h |