| draft-ietf-webdav-rfc2518bis-latest.txt | draft-reschke-webdav-rfc2518bis-latest.txt | |||
|---|---|---|---|---|
| WebDAV Working Group L. Dusseault, Ed. | WebDAV L. Dusseault, Ed. | |||
| Internet-Draft CommerceNet | Internet-Draft CommerceNet | |||
| Obsoletes: 2518 (if approved) February 15, 2007 | Obsoletes: 2518 (if approved) April 2008 | |||
| Updates: 3253 (if approved) | ||||
| Intended status: Standards Track | Intended status: Standards Track | |||
| Expires: August 19, 2007 | Expires: October 3, 2008 | |||
| HTTP Extensions for Distributed Authoring - WebDAV | HTTP Extensions for Distributed Authoring - WebDAV | |||
| draft-ietf-webdav-rfc2518bis-18 | draft-reschke-webdav-rfc2518bis-latest | |||
| 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 35 ¶ | skipping to change at page 1, line 36 ¶ | |||
| 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 August 19, 2007. | This Internet-Draft will expire on October 3, 2008. | |||
| 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, URL 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 1999, and this specification makes | RFC2518 was published in February 1999, and this specification makes | |||
| minor revisions mostly due to interoperability experience. | minor revisions mostly due to interoperability experience. | |||
| Status | ||||
| This is an experimental edit of the WebDAV working group's draft (as | ||||
| of 2007-02-15), see Appendix G.14 for details. All changes have been | ||||
| made by Julian Reschke; if a problem was introduced by these changes, | ||||
| please blame Julian Reschke | ||||
| (<mailto:julian.reschke@greenbytes.de?subject=rfc2518bis>) and not | ||||
| the authors of the working group draft. A diff to the latest WG | ||||
| draft can be found at | ||||
| <http://greenbytes.de/tech/webdav/draft-reschke-from-ietf.diff.html>. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 8 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 2. Notational Conventions . . . . . . . . . . . . . . . . . . . 10 | 2. Notational Conventions . . . . . . . . . . . . . . . . . . . 11 | |||
| 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 3. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 4. Data Model for Resource Properties . . . . . . . . . . . . . 13 | 4. Data Model for Resource Properties . . . . . . . . . . . . . 14 | |||
| 4.1. The Resource Property Model . . . . . . . . . . . . . . 13 | 4.1. The Resource Property Model . . . . . . . . . . . . . . 14 | |||
| 4.2. Properties and HTTP Headers . . . . . . . . . . . . . . 13 | 4.2. Properties and HTTP Headers . . . . . . . . . . . . . . 14 | |||
| 4.3. Property Values . . . . . . . . . . . . . . . . . . . . 13 | 4.3. Property Values . . . . . . . . . . . . . . . . . . . . 14 | |||
| 4.3.1. Example - Property with Mixed Content . . . . . . . 15 | 4.3.1. Example - Property with Mixed Content . . . . . . . 16 | |||
| 4.4. Property Names . . . . . . . . . . . . . . . . . . . . . 17 | 4.4. Property Names . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 4.5. Source Resources and Output Resources . . . . . . . . . 17 | 4.5. Source Resources and Output Resources . . . . . . . . . 18 | |||
| 5. Collections of Web Resources . . . . . . . . . . . . . . . . 18 | 5. Collections of Web Resources . . . . . . . . . . . . . . . . 19 | |||
| 5.1. HTTP URL Namespace Model . . . . . . . . . . . . . . . . 18 | 5.1. HTTP URL Namespace Model . . . . . . . . . . . . . . . . 19 | |||
| 5.2. Collection Resources . . . . . . . . . . . . . . . . . . 18 | 5.2. Collection Resources . . . . . . . . . . . . . . . . . . 19 | |||
| 6. Locking . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 | 5.2.1. Example - non WebDAV-compliant Resource in | |||
| 6.1. Lock Model . . . . . . . . . . . . . . . . . . . . . . . 21 | Collection . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 6.2. Exclusive Vs. Shared Locks . . . . . . . . . . . . . . . 22 | 5.2.2. Example - URL of WebDAV-compliant Resource not | |||
| 6.3. Required Support . . . . . . . . . . . . . . . . . . . . 23 | appearing in Parent Collection . . . . . . . . . . . 21 | |||
| 6.4. Lock Creator and Privileges . . . . . . . . . . . . . . 23 | 6. Locking . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 6.5. Lock Tokens . . . . . . . . . . . . . . . . . . . . . . 24 | 6.1. Lock Model . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 6.6. Lock Timeout . . . . . . . . . . . . . . . . . . . . . . 25 | 6.2. Exclusive Vs. Shared Locks . . . . . . . . . . . . . . . 23 | |||
| 6.7. Lock Capability Discovery . . . . . . . . . . . . . . . 25 | 6.3. Required Support . . . . . . . . . . . . . . . . . . . . 24 | |||
| 6.8. Active Lock Discovery . . . . . . . . . . . . . . . . . 26 | 6.4. Lock Creator and Privileges . . . . . . . . . . . . . . 24 | |||
| 7. Write Lock . . . . . . . . . . . . . . . . . . . . . . . . . 27 | 6.5. Lock Tokens . . . . . . . . . . . . . . . . . . . . . . 25 | |||
| 7.1. Write Locks and Properties . . . . . . . . . . . . . . . 27 | 6.6. Lock Timeout . . . . . . . . . . . . . . . . . . . . . . 26 | |||
| 7.2. Avoiding Lost Updates . . . . . . . . . . . . . . . . . 28 | 6.7. Lock Capability Discovery . . . . . . . . . . . . . . . 26 | |||
| 7.3. Write Locks and Unmapped URLs . . . . . . . . . . . . . 29 | 6.8. Active Lock Discovery . . . . . . . . . . . . . . . . . 27 | |||
| 6.9. Locks and Multiple Bindings . . . . . . . . . . . . . . 27 | ||||
| 7. Write Lock . . . . . . . . . . . . . . . . . . . . . . . . . 28 | ||||
| 7.1. Write Locks and Properties . . . . . . . . . . . . . . . 29 | ||||
| 7.2. Avoiding Lost Updates . . . . . . . . . . . . . . . . . 29 | ||||
| 7.3. Write Locks and Unmapped URLs . . . . . . . . . . . . . 30 | ||||
| 7.4. Write Locks and Collections . . . . . . . . . . . . . . 30 | 7.4. Write Locks and Collections . . . . . . . . . . . . . . 30 | |||
| 7.5. Write Locks and the If Request Header . . . . . . . . . 31 | 7.5. Write Locks and the If Request Header . . . . . . . . . 32 | |||
| 7.5.1. Example - Write Lock and COPY . . . . . . . . . . . 32 | 7.5.1. Example - Write Lock and COPY . . . . . . . . . . . 33 | |||
| 7.5.2. Example - Deleting a Member of a Locked Collection . 32 | 7.5.2. Example - Deleting a Member of a Locked Collection . 33 | |||
| 7.6. Write Locks and COPY/MOVE . . . . . . . . . . . . . . . 33 | 7.6. Write Locks and COPY/MOVE . . . . . . . . . . . . . . . 34 | |||
| 7.7. Refreshing Write Locks . . . . . . . . . . . . . . . . . 34 | 7.7. Refreshing Write Locks . . . . . . . . . . . . . . . . . 34 | |||
| 8. General Request and Response Handling . . . . . . . . . . . . 35 | 8. General Request and Response Handling . . . . . . . . . . . . 36 | |||
| 8.1. Precedence in Error Handling . . . . . . . . . . . . . . 35 | 8.1. Precedence in Error Handling . . . . . . . . . . . . . . 36 | |||
| 8.2. Use of XML . . . . . . . . . . . . . . . . . . . . . . . 35 | 8.2. Use of XML . . . . . . . . . . . . . . . . . . . . . . . 36 | |||
| 8.3. URL Handling . . . . . . . . . . . . . . . . . . . . . . 36 | 8.3. URL Handling . . . . . . . . . . . . . . . . . . . . . . 37 | |||
| 8.3.1. Example - Correct URL Handling . . . . . . . . . . . 36 | 8.3.1. Example - Correct URL Handling . . . . . . . . . . . 37 | |||
| 8.4. Required Bodies in Requests . . . . . . . . . . . . . . 37 | 8.4. Required Bodies in Requests . . . . . . . . . . . . . . 38 | |||
| 8.5. HTTP Headers for use in WebDAV . . . . . . . . . . . . . 37 | 8.5. HTTP Headers for use in WebDAV . . . . . . . . . . . . . 38 | |||
| 8.6. ETag . . . . . . . . . . . . . . . . . . . . . . . . . . 37 | 8.6. ETag . . . . . . . . . . . . . . . . . . . . . . . . . . 38 | |||
| 8.7. Including Error Response Bodies . . . . . . . . . . . . 38 | 8.7. Including Error Response Bodies . . . . . . . . . . . . 39 | |||
| 8.8. Impact of Namespace Operations on Cache Validators . . . 38 | 8.8. Impact of Namespace Operations on Cache Validators . . . 39 | |||
| 9. HTTP Methods for Distributed Authoring . . . . . . . . . . . 40 | 9. HTTP Methods for Distributed Authoring . . . . . . . . . . . 41 | |||
| 9.1. PROPFIND Method . . . . . . . . . . . . . . . . . . . . 40 | 9.1. PROPFIND Method . . . . . . . . . . . . . . . . . . . . 41 | |||
| 9.1.1. PROPFIND Status Codes . . . . . . . . . . . . . . . 41 | 9.1.1. PROPFIND Status Codes . . . . . . . . . . . . . . . 42 | |||
| 9.1.2. Status Codes for Use in 'propstat' Element . . . . . 42 | 9.1.2. Status Codes for Use in 'propstat' Element . . . . . 43 | |||
| 9.1.3. Example - Retrieving Named Properties . . . . . . . 42 | 9.1.3. Example - Retrieving Named Properties . . . . . . . 43 | |||
| 9.1.4. Example - Using 'propname' to Retrieve All | 9.1.4. Example - Using 'propname' to Retrieve All | |||
| Property Names . . . . . . . . . . . . . . . . . . . 44 | Property Names . . . . . . . . . . . . . . . . . . . 45 | |||
| 9.1.5. Example - Using So-called 'allprop' . . . . . . . . 46 | 9.1.5. Example - Using So-called 'allprop' . . . . . . . . 47 | |||
| 9.1.6. Example - Using 'allprop' with 'include' . . . . . . 49 | 9.1.6. Example - Using 'allprop' with 'include' . . . . . . 50 | |||
| 9.2. PROPPATCH Method . . . . . . . . . . . . . . . . . . . . 49 | 9.2. PROPPATCH Method . . . . . . . . . . . . . . . . . . . . 50 | |||
| 9.2.1. Status Codes for Use in 'propstat' Element . . . . . 50 | 9.2.1. Status Codes for Use in 'propstat' Element . . . . . 51 | |||
| 9.2.2. Example - PROPPATCH . . . . . . . . . . . . . . . . 51 | 9.2.2. Example - PROPPATCH . . . . . . . . . . . . . . . . 52 | |||
| 9.3. MKCOL Method . . . . . . . . . . . . . . . . . . . . . . 52 | 9.3. MKCOL Method . . . . . . . . . . . . . . . . . . . . . . 53 | |||
| 9.3.1. MKCOL Status Codes . . . . . . . . . . . . . . . . . 53 | 9.3.1. MKCOL Status Codes . . . . . . . . . . . . . . . . . 54 | |||
| 9.3.2. Example - MKCOL . . . . . . . . . . . . . . . . . . 53 | 9.3.2. Example - MKCOL . . . . . . . . . . . . . . . . . . 54 | |||
| 9.4. GET, HEAD for Collections . . . . . . . . . . . . . . . 54 | 9.4. GET, HEAD for Collections . . . . . . . . . . . . . . . 55 | |||
| 9.5. POST for Collections . . . . . . . . . . . . . . . . . . 54 | 9.5. POST for Collections . . . . . . . . . . . . . . . . . . 55 | |||
| 9.6. DELETE Requirements . . . . . . . . . . . . . . . . . . 54 | 9.6. DELETE Requirements . . . . . . . . . . . . . . . . . . 55 | |||
| 9.6.1. DELETE for Collections . . . . . . . . . . . . . . . 55 | 9.6.1. DELETE for Collections . . . . . . . . . . . . . . . 56 | |||
| 9.6.2. Example - DELETE . . . . . . . . . . . . . . . . . . 55 | 9.6.2. Example - DELETE . . . . . . . . . . . . . . . . . . 56 | |||
| 9.7. PUT Requirements . . . . . . . . . . . . . . . . . . . . 56 | 9.7. PUT Requirements . . . . . . . . . . . . . . . . . . . . 57 | |||
| 9.7.1. PUT for Non-Collection Resources . . . . . . . . . . 56 | 9.7.1. PUT for Non-Collection Resources . . . . . . . . . . 57 | |||
| 9.7.2. PUT for Collections . . . . . . . . . . . . . . . . 57 | 9.7.2. PUT for Collections . . . . . . . . . . . . . . . . 58 | |||
| 9.8. COPY Method . . . . . . . . . . . . . . . . . . . . . . 57 | 9.8. COPY Method . . . . . . . . . . . . . . . . . . . . . . 58 | |||
| 9.8.1. COPY for Non-collection Resources . . . . . . . . . 57 | 9.8.1. COPY for Non-collection Resources . . . . . . . . . 58 | |||
| 9.8.2. COPY for Properties . . . . . . . . . . . . . . . . 58 | 9.8.2. COPY for Properties . . . . . . . . . . . . . . . . 59 | |||
| 9.8.3. COPY for Collections . . . . . . . . . . . . . . . . 58 | 9.8.3. COPY for Collections . . . . . . . . . . . . . . . . 59 | |||
| 9.8.4. COPY and Overwriting Destination Resources . . . . . 59 | 9.8.4. COPY and Overwriting Destination Resources . . . . . 60 | |||
| 9.8.5. Status Codes . . . . . . . . . . . . . . . . . . . . 60 | 9.8.5. Status Codes . . . . . . . . . . . . . . . . . . . . 61 | |||
| 9.8.6. Example - COPY with Overwrite . . . . . . . . . . . 61 | 9.8.6. Example - COPY with Overwrite . . . . . . . . . . . 62 | |||
| 9.8.7. Example - COPY with No Overwrite . . . . . . . . . . 61 | 9.8.7. Example - COPY with No Overwrite . . . . . . . . . . 62 | |||
| 9.8.8. Example - COPY of a Collection . . . . . . . . . . . 62 | 9.8.8. Example - COPY of a Collection . . . . . . . . . . . 63 | |||
| 9.9. MOVE Method . . . . . . . . . . . . . . . . . . . . . . 62 | 9.9. MOVE Method . . . . . . . . . . . . . . . . . . . . . . 63 | |||
| 9.9.1. MOVE for Properties . . . . . . . . . . . . . . . . 63 | 9.9.1. MOVE for Properties . . . . . . . . . . . . . . . . 64 | |||
| 9.9.2. MOVE for Collections . . . . . . . . . . . . . . . . 63 | 9.9.2. MOVE for Collections . . . . . . . . . . . . . . . . 64 | |||
| 9.9.3. MOVE and the Overwrite Header . . . . . . . . . . . 64 | 9.9.3. MOVE and the Overwrite Header . . . . . . . . . . . 65 | |||
| 9.9.4. Status Codes . . . . . . . . . . . . . . . . . . . . 64 | 9.9.4. Status Codes . . . . . . . . . . . . . . . . . . . . 65 | |||
| 9.9.5. Example - MOVE of a Non-Collection . . . . . . . . . 65 | 9.9.5. Example - MOVE of a Non-Collection . . . . . . . . . 66 | |||
| 9.9.6. Example - MOVE of a Collection . . . . . . . . . . . 66 | 9.9.6. Example - MOVE of a Collection . . . . . . . . . . . 67 | |||
| 9.10. LOCK Method . . . . . . . . . . . . . . . . . . . . . . 67 | 9.10. LOCK Method . . . . . . . . . . . . . . . . . . . . . . 68 | |||
| 9.10.1. Creating a Lock on an Existing Resource . . . . . . 67 | 9.10.1. Creating a Lock on an Existing Resource . . . . . . 68 | |||
| 9.10.2. Refreshing Locks . . . . . . . . . . . . . . . . . . 67 | 9.10.2. Refreshing Locks . . . . . . . . . . . . . . . . . . 68 | |||
| 9.10.3. Depth and Locking . . . . . . . . . . . . . . . . . 68 | 9.10.3. Depth and Locking . . . . . . . . . . . . . . . . . 69 | |||
| 9.10.4. Locking Unmapped URLs . . . . . . . . . . . . . . . 68 | 9.10.4. Locking Unmapped URLs . . . . . . . . . . . . . . . 69 | |||
| 9.10.5. Lock Compatibility Table . . . . . . . . . . . . . . 69 | 9.10.5. Lock Compatibility Table . . . . . . . . . . . . . . 69 | |||
| 9.10.6. LOCK Responses . . . . . . . . . . . . . . . . . . . 69 | 9.10.6. LOCK Responses . . . . . . . . . . . . . . . . . . . 70 | |||
| 9.10.7. Example - Simple Lock Request . . . . . . . . . . . 70 | 9.10.7. Example - Simple Lock Request . . . . . . . . . . . 71 | |||
| 9.10.8. Example - Refreshing a Write Lock . . . . . . . . . 72 | 9.10.8. Example - Refreshing a Write Lock . . . . . . . . . 73 | |||
| 9.10.9. Example - Multi-Resource Lock Request . . . . . . . 73 | 9.10.9. Example - Multi-Resource Lock Request . . . . . . . 74 | |||
| 9.11. UNLOCK Method . . . . . . . . . . . . . . . . . . . . . 74 | 9.11. UNLOCK Method . . . . . . . . . . . . . . . . . . . . . 75 | |||
| 9.11.1. Status Codes . . . . . . . . . . . . . . . . . . . . 74 | 9.11.1. Status Codes . . . . . . . . . . . . . . . . . . . . 75 | |||
| 9.11.2. Example - UNLOCK . . . . . . . . . . . . . . . . . . 75 | 9.11.2. Example - UNLOCK . . . . . . . . . . . . . . . . . . 76 | |||
| 10. HTTP Headers for Distributed Authoring . . . . . . . . . . . 76 | 10. HTTP Headers for Distributed Authoring . . . . . . . . . . . 77 | |||
| 10.1. DAV Header . . . . . . . . . . . . . . . . . . . . . . . 76 | 10.1. DAV Header . . . . . . . . . . . . . . . . . . . . . . . 77 | |||
| 10.2. Depth Header . . . . . . . . . . . . . . . . . . . . . . 77 | 10.2. Depth Header . . . . . . . . . . . . . . . . . . . . . . 78 | |||
| 10.3. Destination Header . . . . . . . . . . . . . . . . . . . 78 | 10.3. Destination Header . . . . . . . . . . . . . . . . . . . 79 | |||
| 10.4. If Header . . . . . . . . . . . . . . . . . . . . . . . 78 | 10.4. If Header . . . . . . . . . . . . . . . . . . . . . . . 79 | |||
| 10.4.1. Purpose . . . . . . . . . . . . . . . . . . . . . . 78 | 10.4.1. Purpose . . . . . . . . . . . . . . . . . . . . . . 79 | |||
| 10.4.2. Syntax . . . . . . . . . . . . . . . . . . . . . . . 79 | 10.4.2. Syntax . . . . . . . . . . . . . . . . . . . . . . . 80 | |||
| 10.4.3. List Evaluation . . . . . . . . . . . . . . . . . . 80 | 10.4.3. Evaluation . . . . . . . . . . . . . . . . . . . . . 80 | |||
| 10.4.4. Matching State Tokens and ETags . . . . . . . . . . 80 | 10.4.4. Matching State Tokens and ETags . . . . . . . . . . 81 | |||
| 10.4.5. If Header and Non-DAV Aware Proxies . . . . . . . . 81 | 10.4.5. If Header and Non-DAV Aware Proxies . . . . . . . . 81 | |||
| 10.4.6. Example - No-tag Production . . . . . . . . . . . . 81 | 10.4.6. Example - No-tag Production . . . . . . . . . . . . 82 | |||
| 10.4.7. Example - using "Not" with No-tag Production . . . . 81 | 10.4.7. Example - using "Not" with No-tag Production . . . . 82 | |||
| 10.4.8. Example - causing a Condition to always evaluate | 10.4.8. Example - causing a Condition to always evaluate | |||
| to True . . . . . . . . . . . . . . . . . . . . . . 82 | to True . . . . . . . . . . . . . . . . . . . . . . 82 | |||
| 10.4.9. Example - Tagged List If header in COPY . . . . . . 82 | 10.4.9. Example - Tagged List If header in COPY . . . . . . 83 | |||
| 10.4.10. Example - Matching lock tokens with collection | 10.4.10. Example - Matching lock tokens with collection | |||
| locks . . . . . . . . . . . . . . . . . . . . . . . 82 | locks . . . . . . . . . . . . . . . . . . . . . . . 83 | |||
| 10.4.11. Example - Matching ETags on unmapped URLs . . . . . 83 | 10.4.11. Example - Matching ETags on unmapped URLs . . . . . 84 | |||
| 10.5. Lock-Token Header . . . . . . . . . . . . . . . . . . . 83 | 10.5. Lock-Token Header . . . . . . . . . . . . . . . . . . . 84 | |||
| 10.6. Overwrite Header . . . . . . . . . . . . . . . . . . . . 83 | 10.6. Overwrite Header . . . . . . . . . . . . . . . . . . . . 84 | |||
| 10.7. Timeout Request Header . . . . . . . . . . . . . . . . . 84 | 10.7. Timeout Request Header . . . . . . . . . . . . . . . . . 85 | |||
| 11. Status Code Extensions to HTTP/1.1 . . . . . . . . . . . . . 85 | 11. Status Code Extensions to HTTP/1.1 . . . . . . . . . . . . . 86 | |||
| 11.1. 207 Multi-Status . . . . . . . . . . . . . . . . . . . . 85 | 11.1. 207 Multi-Status . . . . . . . . . . . . . . . . . . . . 86 | |||
| 11.2. 422 Unprocessable Entity . . . . . . . . . . . . . . . . 85 | 11.2. 422 Unprocessable Entity . . . . . . . . . . . . . . . . 86 | |||
| 11.3. 423 Locked . . . . . . . . . . . . . . . . . . . . . . . 85 | 11.3. 423 Locked . . . . . . . . . . . . . . . . . . . . . . . 86 | |||
| 11.4. 424 Failed Dependency . . . . . . . . . . . . . . . . . 85 | 11.4. 424 Failed Dependency . . . . . . . . . . . . . . . . . 86 | |||
| 11.5. 507 Insufficient Storage . . . . . . . . . . . . . . . . 85 | 11.5. 507 Insufficient Storage . . . . . . . . . . . . . . . . 86 | |||
| 12. Use of HTTP Status Codes . . . . . . . . . . . . . . . . . . 86 | 12. Use of HTTP Status Codes . . . . . . . . . . . . . . . . . . 87 | |||
| 12.1. 412 Precondition Failed . . . . . . . . . . . . . . . . 86 | 12.1. 412 Precondition Failed . . . . . . . . . . . . . . . . 87 | |||
| 12.2. 414 Request-URI Too Long . . . . . . . . . . . . . . . . 86 | 13. Multi-Status Response . . . . . . . . . . . . . . . . . . . . 88 | |||
| 13. Multi-Status Response . . . . . . . . . . . . . . . . . . . . 87 | 13.1. Response Headers . . . . . . . . . . . . . . . . . . . . 88 | |||
| 13.1. Response Headers . . . . . . . . . . . . . . . . . . . . 87 | 13.2. Handling Redirected Child Resources . . . . . . . . . . 89 | |||
| 13.2. Handling Redirected Child Resources . . . . . . . . . . 88 | 14. XML Element Definitions . . . . . . . . . . . . . . . . . . . 90 | |||
| 13.3. Internal Status Codes . . . . . . . . . . . . . . . . . 88 | 14.1. activelock XML Element . . . . . . . . . . . . . . . . . 90 | |||
| 14. XML Element Definitions . . . . . . . . . . . . . . . . . . . 89 | 14.2. allprop XML Element . . . . . . . . . . . . . . . . . . 90 | |||
| 14.1. activelock XML Element . . . . . . . . . . . . . . . . . 89 | 14.3. collection XML Element . . . . . . . . . . . . . . . . . 90 | |||
| 14.2. allprop XML Element . . . . . . . . . . . . . . . . . . 89 | 14.4. depth XML Element . . . . . . . . . . . . . . . . . . . 90 | |||
| 14.3. collection XML Element . . . . . . . . . . . . . . . . . 89 | 14.5. error XML Element . . . . . . . . . . . . . . . . . . . 91 | |||
| 14.4. depth XML Element . . . . . . . . . . . . . . . . . . . 89 | 14.6. exclusive XML Element . . . . . . . . . . . . . . . . . 91 | |||
| 14.5. error XML Element . . . . . . . . . . . . . . . . . . . 90 | 14.7. href XML Element . . . . . . . . . . . . . . . . . . . . 91 | |||
| 14.6. exclusive XML Element . . . . . . . . . . . . . . . . . 90 | 14.8. include XML Element . . . . . . . . . . . . . . . . . . 92 | |||
| 14.7. href XML Element . . . . . . . . . . . . . . . . . . . . 90 | 14.9. location XML Element . . . . . . . . . . . . . . . . . . 92 | |||
| 14.8. include XML Element . . . . . . . . . . . . . . . . . . 91 | 14.10. lockentry XML Element . . . . . . . . . . . . . . . . . 92 | |||
| 14.9. location XML Element . . . . . . . . . . . . . . . . . . 91 | 14.11. lockinfo XML Element . . . . . . . . . . . . . . . . . . 92 | |||
| 14.10. lockentry XML Element . . . . . . . . . . . . . . . . . 91 | 14.12. lockroot XML Element . . . . . . . . . . . . . . . . . . 93 | |||
| 14.11. lockinfo XML Element . . . . . . . . . . . . . . . . . . 91 | 14.13. lockscope XML Element . . . . . . . . . . . . . . . . . 93 | |||
| 14.12. lockroot XML Element . . . . . . . . . . . . . . . . . . 92 | 14.14. locktoken XML Element . . . . . . . . . . . . . . . . . 93 | |||
| 14.13. lockscope XML Element . . . . . . . . . . . . . . . . . 92 | 14.15. locktype XML Element . . . . . . . . . . . . . . . . . . 93 | |||
| 14.14. locktoken XML Element . . . . . . . . . . . . . . . . . 92 | 14.16. multistatus XML Element . . . . . . . . . . . . . . . . 94 | |||
| 14.15. locktype XML Element . . . . . . . . . . . . . . . . . . 92 | 14.17. owner XML Element . . . . . . . . . . . . . . . . . . . 94 | |||
| 14.16. multistatus XML Element . . . . . . . . . . . . . . . . 93 | 14.18. prop XML Element . . . . . . . . . . . . . . . . . . . . 94 | |||
| 14.17. owner XML Element . . . . . . . . . . . . . . . . . . . 93 | 14.19. propertyupdate XML Element . . . . . . . . . . . . . . . 95 | |||
| 14.18. prop XML Element . . . . . . . . . . . . . . . . . . . . 93 | 14.20. propfind XML Element . . . . . . . . . . . . . . . . . . 95 | |||
| 14.19. propertyupdate XML Element . . . . . . . . . . . . . . . 94 | 14.21. propname XML Element . . . . . . . . . . . . . . . . . . 95 | |||
| 14.20. propfind XML Element . . . . . . . . . . . . . . . . . . 94 | 14.22. propstat XML Element . . . . . . . . . . . . . . . . . . 95 | |||
| 14.21. propname XML Element . . . . . . . . . . . . . . . . . . 94 | 14.23. remove XML Element . . . . . . . . . . . . . . . . . . . 96 | |||
| 14.22. propstat XML Element . . . . . . . . . . . . . . . . . . 94 | 14.24. response XML Element . . . . . . . . . . . . . . . . . . 96 | |||
| 14.23. remove XML Element . . . . . . . . . . . . . . . . . . . 95 | 14.25. responsedescription XML Element . . . . . . . . . . . . 97 | |||
| 14.24. response XML Element . . . . . . . . . . . . . . . . . . 95 | 14.26. set XML Element . . . . . . . . . . . . . . . . . . . . 97 | |||
| 14.25. responsedescription XML Element . . . . . . . . . . . . 96 | 14.27. shared XML Element . . . . . . . . . . . . . . . . . . . 97 | |||
| 14.26. set XML Element . . . . . . . . . . . . . . . . . . . . 96 | 14.28. status XML Element . . . . . . . . . . . . . . . . . . . 98 | |||
| 14.27. shared XML Element . . . . . . . . . . . . . . . . . . . 96 | 14.29. timeout XML Element . . . . . . . . . . . . . . . . . . 98 | |||
| 14.28. status XML Element . . . . . . . . . . . . . . . . . . . 96 | 14.30. write XML Element . . . . . . . . . . . . . . . . . . . 98 | |||
| 14.29. timeout XML Element . . . . . . . . . . . . . . . . . . 97 | 15. DAV Properties . . . . . . . . . . . . . . . . . . . . . . . 99 | |||
| 14.30. write XML Element . . . . . . . . . . . . . . . . . . . 97 | 15.1. creationdate Property . . . . . . . . . . . . . . . . . 99 | |||
| 15. DAV Properties . . . . . . . . . . . . . . . . . . . . . . . 98 | 15.2. displayname Property . . . . . . . . . . . . . . . . . . 100 | |||
| 15.1. creationdate Property . . . . . . . . . . . . . . . . . 98 | 15.3. getcontentlanguage Property . . . . . . . . . . . . . . 100 | |||
| 15.2. displayname Property . . . . . . . . . . . . . . . . . . 99 | 15.4. getcontentlength Property . . . . . . . . . . . . . . . 101 | |||
| 15.3. getcontentlanguage Property . . . . . . . . . . . . . . 99 | 15.5. getcontenttype Property . . . . . . . . . . . . . . . . 101 | |||
| 15.4. getcontentlength Property . . . . . . . . . . . . . . . 100 | 15.6. getetag Property . . . . . . . . . . . . . . . . . . . . 102 | |||
| 15.5. getcontenttype Property . . . . . . . . . . . . . . . . 100 | 15.7. getlastmodified Property . . . . . . . . . . . . . . . . 102 | |||
| 15.6. getetag Property . . . . . . . . . . . . . . . . . . . . 101 | 15.8. lockdiscovery Property . . . . . . . . . . . . . . . . . 103 | |||
| 15.7. getlastmodified Property . . . . . . . . . . . . . . . . 101 | 15.8.1. Example - Retrieving DAV:lockdiscovery . . . . . . . 104 | |||
| 15.8. lockdiscovery Property . . . . . . . . . . . . . . . . . 102 | 15.9. resourcetype Property . . . . . . . . . . . . . . . . . 105 | |||
| 15.8.1. Example - Retrieving DAV:lockdiscovery . . . . . . . 103 | 15.10. supportedlock Property . . . . . . . . . . . . . . . . . 106 | |||
| 15.9. resourcetype Property . . . . . . . . . . . . . . . . . 104 | 15.10.1. Example - Retrieving DAV:supportedlock . . . . . . . 107 | |||
| 15.10. supportedlock Property . . . . . . . . . . . . . . . . . 105 | 16. Precondition/Postcondition XML Elements . . . . . . . . . . . 108 | |||
| 15.10.1. Example - Retrieving DAV:supportedlock . . . . . . . 106 | 16.1. DAV:lock-token-matches-request-uri (Precondition) . . . 109 | |||
| 16. Precondition/Postcondition XML Elements . . . . . . . . . . . 107 | 16.2. DAV:lock-token-submitted (Precondition) . . . . . . . . 109 | |||
| 16.3. DAV:no-conflicting-lock (Precondition) . . . . . . . . . 110 | ||||
| 16.4. DAV:no-external-entities (Precondition) . . . . . . . . 110 | ||||
| 16.5. DAV:preserved-live-properties (postcondition) . . . . . 110 | ||||
| 16.6. DAV:propfind-finite-depth (Precondition) . . . . . . . . 110 | ||||
| 16.7. DAV:cannot-modify-protected-property (Precondition) . . 110 | ||||
| 17. XML Extensibility in DAV . . . . . . . . . . . . . . . . . . 111 | 17. XML Extensibility in DAV . . . . . . . . . . . . . . . . . . 111 | |||
| 18. DAV Compliance Classes . . . . . . . . . . . . . . . . . . . 113 | 18. DAV Compliance Classes . . . . . . . . . . . . . . . . . . . 113 | |||
| 18.1. Class 1 . . . . . . . . . . . . . . . . . . . . . . . . 113 | 18.1. Class 1 . . . . . . . . . . . . . . . . . . . . . . . . 113 | |||
| 18.2. Class 2 . . . . . . . . . . . . . . . . . . . . . . . . 113 | 18.2. Class 2 . . . . . . . . . . . . . . . . . . . . . . . . 113 | |||
| 18.3. Class 3 . . . . . . . . . . . . . . . . . . . . . . . . 113 | 18.3. Class 3 . . . . . . . . . . . . . . . . . . . . . . . . 113 | |||
| 19. Internationalization Considerations . . . . . . . . . . . . . 115 | 19. Internationalization Considerations . . . . . . . . . . . . . 115 | |||
| 20. Security Considerations . . . . . . . . . . . . . . . . . . . 117 | 20. Security Considerations . . . . . . . . . . . . . . . . . . . 117 | |||
| 20.1. Authentication of Clients . . . . . . . . . . . . . . . 117 | 20.1. Authentication of Clients . . . . . . . . . . . . . . . 117 | |||
| 20.2. Denial of Service . . . . . . . . . . . . . . . . . . . 117 | 20.2. Denial of Service . . . . . . . . . . . . . . . . . . . 117 | |||
| 20.3. Security through Obscurity . . . . . . . . . . . . . . . 118 | 20.3. Security through Obscurity . . . . . . . . . . . . . . . 118 | |||
| 20.4. Privacy Issues Connected to Locks . . . . . . . . . . . 118 | 20.4. Privacy Issues Connected to Locks . . . . . . . . . . . 118 | |||
| 20.5. Privacy Issues Connected to Properties . . . . . . . . . 118 | 20.5. Privacy Issues Connected to Properties . . . . . . . . . 118 | |||
| 20.6. Implications of XML Entities . . . . . . . . . . . . . . 119 | 20.6. Implications of XML Entities . . . . . . . . . . . . . . 119 | |||
| 20.7. Risks Connected with Lock Tokens . . . . . . . . . . . . 119 | 20.7. Risks Connected with Lock Tokens . . . . . . . . . . . . 119 | |||
| 20.8. Hosting Malicious Content . . . . . . . . . . . . . . . 120 | 20.8. Hosting Malicious Content . . . . . . . . . . . . . . . 120 | |||
| 21. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 121 | 21. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 122 | |||
| 21.1. New URI Schemes . . . . . . . . . . . . . . . . . . . . 121 | 21.1. New URI Schemes . . . . . . . . . . . . . . . . . . . . 122 | |||
| 21.2. XML Namespaces . . . . . . . . . . . . . . . . . . . . . 121 | 21.2. XML Namespaces . . . . . . . . . . . . . . . . . . . . . 122 | |||
| 21.3. Message Header Fields . . . . . . . . . . . . . . . . . 121 | 21.3. Message Header Fields . . . . . . . . . . . . . . . . . 122 | |||
| 21.3.1. DAV . . . . . . . . . . . . . . . . . . . . . . . . 121 | 21.3.1. DAV . . . . . . . . . . . . . . . . . . . . . . . . 122 | |||
| 21.3.2. Depth . . . . . . . . . . . . . . . . . . . . . . . 121 | 21.3.2. Depth . . . . . . . . . . . . . . . . . . . . . . . 123 | |||
| 21.3.3. Destination . . . . . . . . . . . . . . . . . . . . 122 | 21.3.3. Destination . . . . . . . . . . . . . . . . . . . . 123 | |||
| 21.3.4. If . . . . . . . . . . . . . . . . . . . . . . . . . 122 | 21.3.4. If . . . . . . . . . . . . . . . . . . . . . . . . . 123 | |||
| 21.3.5. Lock-Token . . . . . . . . . . . . . . . . . . . . . 122 | 21.3.5. Lock-Token . . . . . . . . . . . . . . . . . . . . . 123 | |||
| 21.3.6. Overwrite . . . . . . . . . . . . . . . . . . . . . 122 | 21.3.6. Overwrite . . . . . . . . . . . . . . . . . . . . . 124 | |||
| 21.3.7. Timeout . . . . . . . . . . . . . . . . . . . . . . 123 | 21.3.7. Timeout . . . . . . . . . . . . . . . . . . . . . . 124 | |||
| 22. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 124 | 21.4. HTTP Status Codes . . . . . . . . . . . . . . . . . . . 124 | |||
| 23. Contributors to This Specification . . . . . . . . . . . . . 126 | 22. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 125 | |||
| 24. Authors of RFC2518 . . . . . . . . . . . . . . . . . . . . . 127 | 23. Contributors to This Specification . . . . . . . . . . . . . 127 | |||
| 25. References . . . . . . . . . . . . . . . . . . . . . . . . . 128 | 24. Authors of RFC2518 . . . . . . . . . . . . . . . . . . . . . 128 | |||
| 25.1. Normative References . . . . . . . . . . . . . . . . . . 128 | 25. References . . . . . . . . . . . . . . . . . . . . . . . . . 129 | |||
| 25.2. Informational References . . . . . . . . . . . . . . . . 129 | 25.1. Normative References . . . . . . . . . . . . . . . . . . 129 | |||
| Appendix A. Notes on Processing XML Elements . . . . . . . . . . 130 | 25.2. Informational References . . . . . . . . . . . . . . . . 130 | |||
| A.1. Notes on Empty XML Elements . . . . . . . . . . . . . . 130 | Appendix A. Notes on Processing XML Elements . . . . . . . . . . 132 | |||
| A.2. Notes on Illegal XML Processing . . . . . . . . . . . . 130 | A.1. Notes on Empty XML Elements . . . . . . . . . . . . . . 132 | |||
| A.3. Example - XML Syntax Error . . . . . . . . . . . . . . . 130 | A.2. Notes on Illegal XML Processing . . . . . . . . . . . . 132 | |||
| A.4. Example - Unexpected XML Element . . . . . . . . . . . . 131 | A.3. Example - XML Syntax Error . . . . . . . . . . . . . . . 132 | |||
| Appendix B. Notes on HTTP Client Compatibility . . . . . . . . . 132 | A.4. Example - Unexpected XML Element . . . . . . . . . . . . 133 | |||
| Appendix C. The 'opaquelocktoken' Scheme and URIs . . . . . . . 133 | Appendix B. Notes on HTTP Client Compatibility . . . . . . . . . 134 | |||
| Appendix D. Lock-null Resources . . . . . . . . . . . . . . . . 134 | Appendix C. The 'opaquelocktoken' Scheme and URIs . . . . . . . 135 | |||
| D.1. Guidance for Clients Using LOCK to Create Resources . . 134 | Appendix D. Lock-Null Resources . . . . . . . . . . . . . . . . 136 | |||
| Appendix E. Guidance for Clients Desiring to Authenticate . . . 136 | D.1. Guidance for Clients Using LOCK to Create Resources . . 136 | |||
| Appendix F. Summary of changes from RFC2518 . . . . . . . . . . 138 | Appendix E. Guidance for Clients Desiring to Authenticate . . . 138 | |||
| F.1. Changes for both Client and Server Implementations . . . 138 | Appendix F. Summary of changes from RFC2518 . . . . . . . . . . 140 | |||
| F.2. Changes for Server Implementations . . . . . . . . . . . 139 | F.1. Changes for both Client and Server Implementations . . . 140 | |||
| F.3. Other Changes . . . . . . . . . . . . . . . . . . . . . 140 | F.2. Changes for Server Implementations . . . . . . . . . . . 141 | |||
| F.3. Other Changes . . . . . . . . . . . . . . . . . . . . . 142 | ||||
| Appendix G. Change Log (to be removed by RFC Editor before | Appendix G. Change Log (to be removed by RFC Editor before | |||
| publication) . . . . . . . . . . . . . . . . . . . . 142 | publication) . . . . . . . . . . . . . . . . . . . . 143 | |||
| G.1. Changes from -05 to -06 . . . . . . . . . . . . . . . . 142 | G.1. Changes from -05 to -06 . . . . . . . . . . . . . . . . 143 | |||
| G.2. Changes in -07 . . . . . . . . . . . . . . . . . . . . . 142 | G.2. Changes in -07 . . . . . . . . . . . . . . . . . . . . . 143 | |||
| G.3. Changes in -08 . . . . . . . . . . . . . . . . . . . . . 143 | G.3. Changes in -08 . . . . . . . . . . . . . . . . . . . . . 144 | |||
| G.4. Changes in -09 . . . . . . . . . . . . . . . . . . . . . 144 | G.4. Changes in -09 . . . . . . . . . . . . . . . . . . . . . 145 | |||
| G.5. Changes in -10 . . . . . . . . . . . . . . . . . . . . . 145 | G.5. Changes in -10 . . . . . . . . . . . . . . . . . . . . . 146 | |||
| G.6. Changes in -11 . . . . . . . . . . . . . . . . . . . . . 145 | G.6. Changes in -11 . . . . . . . . . . . . . . . . . . . . . 146 | |||
| G.7. Changes in -12 . . . . . . . . . . . . . . . . . . . . . 145 | G.7. Changes in -12 . . . . . . . . . . . . . . . . . . . . . 146 | |||
| G.8. Changes in -13 . . . . . . . . . . . . . . . . . . . . . 146 | G.8. Changes in -13 . . . . . . . . . . . . . . . . . . . . . 147 | |||
| G.9. Changes in -14 . . . . . . . . . . . . . . . . . . . . . 146 | G.9. Changes in -14 . . . . . . . . . . . . . . . . . . . . . 147 | |||
| G.10. Changes in -15 . . . . . . . . . . . . . . . . . . . . . 146 | G.10. Changes in -15 . . . . . . . . . . . . . . . . . . . . . 147 | |||
| G.11. Changes in -16 . . . . . . . . . . . . . . . . . . . . . 146 | G.11. Changes in -16 . . . . . . . . . . . . . . . . . . . . . 147 | |||
| G.12. Changes in -17 . . . . . . . . . . . . . . . . . . . . . 147 | G.12. Changes in -17 . . . . . . . . . . . . . . . . . . . . . 148 | |||
| G.13. Changes in -18 . . . . . . . . . . . . . . . . . . . . . 147 | G.13. Changes in -18 . . . . . . . . . . . . . . . . . . . . . 148 | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 148 | G.14. Changes compared to RFC2518bis, dated 2007-02-15 . . . . 149 | |||
| Intellectual Property and Copyright Statements . . . . . . . . . 149 | Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 153 | ||||
| Intellectual Property and Copyright Statements . . . . . . . . . 154 | ||||
| 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 8, line 43 ¶ | skipping to change at page 9, line 43 ¶ | |||
| This document does not specify the versioning operations suggested by | This document does not specify the versioning operations suggested by | |||
| [RFC2291]. That work was done in a separate document, "Versioning | [RFC2291]. That work was done in a separate document, "Versioning | |||
| Extensions to WebDAV" [RFC3253]. | Extensions to WebDAV" [RFC3253]. | |||
| The sections below provide a detailed introduction to various WebDAV | The sections below provide a detailed introduction to various WebDAV | |||
| abstractions: resource properties (Section 4), collections of | abstractions: resource properties (Section 4), collections of | |||
| resources (Section 5), locks (Section 6) in general and write locks | resources (Section 5), locks (Section 6) in general and write locks | |||
| (Section 7) specifically. | (Section 7) specifically. | |||
| These abstractions are manipulated by the WebDAV-specific HTTP | These abstractions are manipulated by the WebDAV-specific HTTP | |||
| methods (Section 9) and the extra HTTP headers (Section 10) used with | methods and the extra HTTP headers, defined in Section 8 (generic | |||
| WebDAV methods. General considerations for handling HTTP requests | method handling), Section 9 (method definitions) and Section 10 | |||
| and responses in WebDAV are found in Section 8. | (header definitions). | |||
| 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 extra status codes developed for WebDAV | This specification defines extra status codes developed for WebDAV | |||
| methods (Section 11) and describes existing HTTP status codes | methods (Section 11) and describes existing HTTP status codes | |||
| (Section 12) as used in WebDAV. Since some WebDAV methods may | (Section 12) as used in WebDAV. Since some WebDAV methods may | |||
| operate over many resources, the Multi-Status response (Section 13) | operate over many resources, the Multi-Status response (Section 13) | |||
| 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 precondition | resources. Finally, this version of WebDAV introduces precondition | |||
| and postcondition (Section 16) XML elements in error response bodies. | and postcondition (Section 16) XML elements in error response bodies. | |||
| WebDAV uses XML ([REC-XML]) for property names and some values, and | WebDAV uses XML ([REC-XML]) for property names and some values, and | |||
| also uses XML to marshal complicated requests and responses. This | also uses XML to marshal complicated requests and responses. This | |||
| specification contains DTD and text definitions of all all properties | specification contains DTD and text definitions of all all properties | |||
| (Section 15) and all other XML elements (Section 14) used in | (Section 15) and other XML elements (Section 14) used in marshalling. | |||
| marshalling. WebDAV includes a few special rules on extending | WebDAV includes a few special rules on extending WebDAV XML | |||
| WebDAV XML marshalling in backwards-compatible ways (Section 17). | marshalling in backwards-compatible ways (Section 17). | |||
| 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 18), on | resource to be compliant with this specification (Section 18), on | |||
| internationalization support (Section 19), and on security | internationalization support (Section 19), and on security | |||
| (Section 20). | (Section 20). | |||
| 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 | |||
| skipping to change at page 14, line 14 ¶ | skipping to change at page 15, line 14 ¶ | |||
| XML's support for multiple character sets allows any human-readable | XML's support for multiple character sets allows any human-readable | |||
| property to be encoded and read in a character set familiar to the | property to be encoded and read in a character set familiar to the | |||
| user. XML's support for multiple human languages, using the "xml: | user. XML's support for multiple human languages, using the "xml: | |||
| lang" attribute, handles cases where the same character set is | lang" attribute, handles cases where the same character set is | |||
| employed by multiple human languages. Note that xml:lang scope is | employed by multiple human languages. Note that xml:lang scope is | |||
| recursive, so an xml:lang attribute on any element containing a | recursive, so an xml:lang attribute on any element containing a | |||
| property name element applies to the property value unless it has | property name element applies to the property value unless it has | |||
| been overridden by a more locally scoped attribute. Note that a | been overridden by a more locally scoped attribute. Note that a | |||
| property only has one value, in one language (or language MAY be left | property only has one value, in one language (or language MAY be left | |||
| undefined), not multiple values in different languages or a single | undefined); it does not have multiple values in different languages | |||
| value in multiple languages. | or a single value in multiple languages. | |||
| A property is always represented with an XML element consisting of | A property is always represented with an XML element consisting of | |||
| the property name, called the "property name element". The simplest | the property name, called the "property name element". The simplest | |||
| example is an empty property, which is different from a property that | example is an empty property, which is different from a property that | |||
| does not exist: | 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 the property appears inside the property name element. | The value of the 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 | |||
| skipping to change at page 19, line 32 ¶ | skipping to change at page 20, line 32 ¶ | |||
| Although commonly a mapping consists of a single segment and a | Although commonly a mapping consists of a single segment and a | |||
| resource, in general, a mapping consists of a set of segments and a | resource, in general, a mapping consists of a set of segments and a | |||
| resource. This allows a server to treat a set of segments as | resource. This allows a server to treat a set of segments as | |||
| equivalent (i.e. either all of the segments are mapped to the same | equivalent (i.e. either all of the segments are mapped to the same | |||
| resource, or none of the segments are mapped to a resource). For | resource, or none of the segments are mapped to a resource). For | |||
| example, a server that performs case-folding on segments will treat | example, a server that performs case-folding on segments will treat | |||
| the segments "ab", "Ab", "aB", and "AB" as equivalent. A client can | the segments "ab", "Ab", "aB", and "AB" as equivalent. A client can | |||
| then use any of these segments to identify the resource. Note that a | then use any of these segments to identify the resource. Note that a | |||
| PROPFIND result will select one of these equivalent segments to | PROPFIND result will select one of these equivalent segments to | |||
| identify the mapping, so there will be one PROPFIND response element | identify the mapping, so there will be one PROPFIND response element | |||
| per mapping, not one per segment in the mapping. | per mapping, not one per segment in the mapping. Servers SHOULD | |||
| consistently use the same segment in PROPFIND responses. | ||||
| Collection resources MAY have mappings to non-WebDAV compliant | Collection resources MAY have mappings to non-WebDAV compliant | |||
| resources in the HTTP URL namespace hierarchy but are not required to | resources in the HTTP URL namespace hierarchy but are not required to | |||
| do so. For example, if resource X with URL | do so. For example, if resource X with URL | |||
| "http://example.com/bar/blah" is not WebDAV compliant and resource A | "http://example.com/bar/blah" is not WebDAV compliant and resource A | |||
| with "URL http://example.com/bar/" identifies a WebDAV collection, | with "URL http://example.com/bar/" identifies a WebDAV collection, | |||
| then A may or may not have a mapping from "blah" to X. | then A may or may not have a mapping from "blah" to X. | |||
| If a WebDAV compliant resource has no WebDAV compliant internal | If a WebDAV compliant resource has no WebDAV compliant internal | |||
| members in the HTTP URL namespace hierarchy then the WebDAV compliant | members in the HTTP URL namespace hierarchy then the WebDAV compliant | |||
| skipping to change at page 20, line 20 ¶ | skipping to change at page 21, line 21 ¶ | |||
| find the DAV:resourcetype property more reliable than the URL to find | find the DAV:resourcetype property more reliable than the URL to find | |||
| out if a resource is a collection. | 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. | |||
| 5.2.1. Example - non WebDAV-compliant Resource in Collection | ||||
| A typical scenario in which mapped URLs do not appear as members of | A typical scenario in which mapped URLs do not appear as members of | |||
| their parent collection is the case where a server allows links or | their parent collection is the case where a server allows links or | |||
| redirects to non-WebDAV resources. For instance, "/col/link" might | redirects to non-WebDAV resources. For instance, "/col/link" might | |||
| not appear as a member of "/col/", although the server would respond | not appear as a member of "/col/", although the server would respond | |||
| with a 302 status to a GET request to "/col/link", thus the URL | with a 302 status to a GET request to "/col/link", thus the URL | |||
| "/col/link" would indeed be mapped. Similarly, a dynamically- | "/col/link" would indeed be mapped. Similarly, a dynamically- | |||
| generated page might have a URL mapping from "/col/index.html", thus | generated page might have a URL mapping from "/col/index.html", thus | |||
| this resource might respond with a 200 OK to a GET request yet not | this resource might respond with a 200 OK to a GET request yet not | |||
| appear as a member of "/col/". | appear as a member of "/col/". | |||
| 5.2.2. Example - URL of WebDAV-compliant Resource not appearing in | ||||
| Parent Collection | ||||
| Some mappings to even WebDAV-compliant resources might not appear in | Some mappings to even WebDAV-compliant resources might not appear in | |||
| the parent collection. An example for this case are servers that | the parent collection. An example for this case are servers that | |||
| support multiple alias URLs for each WebDAV compliant resource. A | support multiple alias URLs for each WebDAV compliant resource. A | |||
| server may implement case-insensitive URLs, thus "/col/a" and | server may implement case-insensitive URLs, thus "/col/a" and | |||
| "/col/A" identify the same resource, yet only either "a" or "A" are | "/col/A" identify the same resource, yet only either "a" or "A" are | |||
| reported upon listing the members of "/col". In cases where a server | reported upon listing the members of "/col". In cases where a server | |||
| treats a set of segments as equivalent, the server MUST expose only | treats a set of segments as equivalent, the server MUST expose only | |||
| one preferred segment per mapping, consistently chosen, in PROPFIND | one preferred segment per mapping, consistently chosen, in PROPFIND | |||
| responses. | responses. | |||
| skipping to change at page 21, line 50 ¶ | skipping to change at page 22, line 50 ¶ | |||
| resource. | resource. | |||
| 4. For a collection that is locked with a depth-infinity lock L, all | 4. For a collection that is locked with a depth-infinity lock L, all | |||
| member resources are indirectly locked. Changes in membership of | member resources are indirectly locked. Changes in membership of | |||
| a such a collection affect the set of indirectly locked | a such a collection affect the set of indirectly locked | |||
| resources: | resources: | |||
| * If a member resource is added to the collection, the new | * If a member resource is added to the collection, the new | |||
| member resource MUST NOT already have a conflicting lock, | member resource MUST NOT already have a conflicting lock, | |||
| because the new resource MUST become indirectly locked by L. | because the new resource MUST become indirectly locked by L. | |||
| [[anchor9: So what happens if it has a conflicting lock?]] | ||||
| [[anchor10: Language?]] | ||||
| * If a member resource stops being a member of the collection, | * If a member resource stops being a member of the collection, | |||
| then the resource MUST no longer be indirectly locked by L. | then the resource MUST no longer be indirectly locked by L. | |||
| 5. Each lock is identified by a single globally unique lock token | 5. Each lock is identified by a single globally unique lock token | |||
| (Section 6.5). | (Section 6.5). | |||
| 6. An UNLOCK request deletes the lock with the specified lock token. | 6. An UNLOCK request deletes the lock with the specified lock token. | |||
| After a lock is deleted, no resource is locked by that lock. | After a lock is deleted, no resource is locked by that lock. | |||
| skipping to change at page 22, line 29 ¶ | skipping to change at page 23, line 32 ¶ | |||
| The most basic form of lock is an exclusive lock. Exclusive locks | The most basic form of lock is an exclusive lock. Exclusive locks | |||
| avoid having to deal with content change conflicts, without requiring | avoid having to deal with content change conflicts, without requiring | |||
| any coordination other than the methods described in this | any coordination other than the methods described in this | |||
| specification. | specification. | |||
| However, there are times when the goal of a lock is not to exclude | However, there are times when the goal of a lock is not to exclude | |||
| others from exercising an access right but rather to provide a | others from exercising an access right but rather to provide a | |||
| mechanism for principals to indicate that they intend to exercise | mechanism for principals to indicate that they intend to exercise | |||
| their access rights. Shared locks are provided for this case. A | their access rights. Shared locks are provided for this case. A | |||
| shared lock allows multiple principals to receive a lock. Hence any | shared lock allows multiple principals to receive a distinct lock. | |||
| principal that has both access privileges and a valid lock can use | Hence any principal that has both access privileges and a valid lock | |||
| the locked resource. | can use the locked resource. | |||
| With shared locks there are two trust sets that affect a resource. | With shared locks there are two trust sets that affect a resource. | |||
| The first trust set is created by access permissions. Principals who | The first trust set is created by access permissions. Principals who | |||
| are trusted, for example, may have permission to write to the | are trusted, for example, may have permission to write to the | |||
| resource. Among those who have access permission to write to the | resource. Among those who have access permission to write to the | |||
| resource, the set of principals who have taken out a shared lock also | resource, the set of principals who have taken out a shared lock also | |||
| must trust each other, creating a (typically) smaller trust set | must trust each other, creating a (typically) smaller trust set | |||
| within the access permission write set. | within the access permission write set. | |||
| Starting with every possible principal on the Internet, in most | Starting with every possible principal on the Internet, in most | |||
| skipping to change at page 25, line 19 ¶ | skipping to change at page 26, line 19 ¶ | |||
| ultimately chooses the timeout value. Timeout is measured in seconds | ultimately chooses the timeout value. Timeout is measured in seconds | |||
| remaining until lock expiration. | remaining until lock expiration. | |||
| The timeout counter MUST be restarted if a refresh lock request is | The timeout counter MUST be restarted if a refresh lock request is | |||
| successful (see Section 9.10.2). The timeout counter SHOULD NOT be | successful (see Section 9.10.2). The timeout counter SHOULD NOT be | |||
| restarted at any other time. | restarted at any other time. | |||
| If the timeout expires then the lock SHOULD be removed. In this case | If the timeout expires then the lock SHOULD be removed. In this case | |||
| the server SHOULD act as if an UNLOCK method was executed by the | the server SHOULD act as if an UNLOCK method was executed by the | |||
| server on the resource using the lock token of the timed-out lock, | server on the resource using the lock token of the timed-out lock, | |||
| performed with its override authority. | performed with its override authority. For instance, if the server | |||
| implements some sort of logging and notification system for locking- | ||||
| related events, a lock timeout should be treated similar to an UNLOCK | ||||
| request. | ||||
| Servers are advised to pay close attention to the values submitted by | Servers are advised to pay close attention to the values submitted by | |||
| clients, as they will be indicative of the type of activity the | clients, as they will be indicative of the type of activity the | |||
| client intends to perform. For example, an applet running in a | client intends to perform. For example, an applet running in a | |||
| browser may need to lock a resource, but because of the instability | browser may need to lock a resource, but because of the instability | |||
| of the environment within which the applet is running, the applet may | of the environment within which the applet is running, the applet may | |||
| be turned off without warning. As a result, the applet is likely to | be turned off without warning. As a result, the applet is likely to | |||
| ask for a relatively small timeout value so that if the applet dies, | ask for a relatively small timeout value so that if the applet dies, | |||
| the lock can be quickly harvested. However, a document management | the lock can be quickly harvested. However, a document management | |||
| system is likely to ask for an extremely long timeout because its | system is likely to ask for an extremely long timeout because its | |||
| skipping to change at page 27, line 5 ¶ | skipping to change at page 27, line 21 ¶ | |||
| 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 DAV: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 MAY even provide the lock tokens. | 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 DAV:lockdiscovery property. | the DAV:lockdiscovery property. | |||
| 6.9. Locks and Multiple Bindings | ||||
| A resource may be made available through more than one URI. A lock | ||||
| MUST cover the resource as well as the URI to which the LOCK request | ||||
| was addressed. The lock MAY cover other URIs mapped to the same | ||||
| resource as well. | ||||
| [[anchor15: Section was removed in draft 15. Why?]] | ||||
| 7. Write Lock | 7. Write Lock | |||
| This section describes the semantics specific to the write lock type. | This section describes the semantics specific to the write lock type. | |||
| The write lock is a specific instance of a lock type, and is the only | The write lock is a specific instance of a lock type, and is the only | |||
| lock type described in this specification. | lock type described in this specification. | |||
| An exclusive write lock protects a resource: it prevents changes by | An exclusive write lock protects a resource: it prevents changes by | |||
| any principal other than the lock creator and in any case where the | any principal other than the lock creator and in any case where the | |||
| lock token is not submitted (e.g. by a client process other than the | lock token is not submitted (e.g. by a client process other than the | |||
| one holding the lock). | one holding the lock). [[anchor16: All of this is repeated in the | |||
| next paragraph. Optimally remove this one.]] | ||||
| Clients MUST submit a lock-token they are authorized to use in any | Clients MUST submit a lock-token they are authorized to use in any | |||
| request which modifies a write-locked resource. The list of | request which modifies a write-locked resource. The list of | |||
| modifications covered by a write-lock include: | modifications covered by a write-lock include: | |||
| 1. A change to any of the following aspects of any write-locked | 1. A change to any of the following aspects of any write-locked | |||
| resource: | resource: | |||
| * any variant, | * any variant, | |||
| * any dead property, | * any dead property, | |||
| * any live property which is lockable (a live property is | * any live property which is lockable (a live property is | |||
| lockable unless otherwise defined.) | lockable unless otherwise defined.) | |||
| [[anchor17: So there are live properties which are lockable and | ||||
| may change their values while they are locked, and there are live | ||||
| properties which respect locks and must not change their values | ||||
| while they are locked? Is this really intended or is this | ||||
| section historical and should be dropped? --Manfred Baedke]] | ||||
| 2. For collections, any modification of an internal member URI. An | 2. For collections, any modification of an internal member URI. An | |||
| internal member URI of a collection is considered to be modified | internal member URI of a collection is considered to be modified | |||
| if it is added, removed, or identifies a different resource. | if it is added, removed, or identifies a different resource. | |||
| More discussion on write locks and collections is found in | More discussion on write locks and collections is found in | |||
| Section 7.4. | Section 7.4. | |||
| 3. A modification of the mapping of the root of the write lock, | 3. A modification of the mapping of the root of the write lock, | |||
| either to another resource or to no resource (e.g. DELETE). | either to another resource or to no resource (e.g. DELETE). | |||
| Of the methods defined in HTTP and WebDAV, PUT, POST, PROPPATCH, | Of the methods defined in HTTP and WebDAV, PUT, POST, PROPPATCH, | |||
| skipping to change at page 28, line 4 ¶ | skipping to change at page 29, line 11 ¶ | |||
| lock. | lock. | |||
| The next few sections describe in more specific terms how write locks | The next few sections describe in more specific terms how write locks | |||
| interact with various operations. | interact with various operations. | |||
| 7.1. Write Locks and Properties | 7.1. Write Locks and Properties | |||
| While those without a write lock may not alter a property on a | While those without a write lock may not alter a property on a | |||
| resource it is still possible for the values of live properties to | resource it is still possible for the values of live properties to | |||
| change, even while locked, due to the requirements of their schemas. | change, even while locked, due to the requirements of their schemas. | |||
| Only dead properties and live properties defined as lockable are | Only dead properties and live properties defined as lockable are | |||
| guaranteed not to change while write locked. | guaranteed not to change while write locked. [[anchor19: The whole | |||
| paragraph doesn't seem to make sense anymore, because it seems to say | ||||
| the same thing as the previous section, but uses different | ||||
| terminology.]] | ||||
| 7.2. Avoiding Lost Updates | 7.2. Avoiding Lost Updates | |||
| Although the write locks provide some help in preventing lost | Although the write locks provide some help in preventing lost | |||
| updates, they cannot guarantee that updates will never be lost. | updates, they cannot guarantee that updates will never be lost. | |||
| Consider the following scenario: | Consider the following scenario: | |||
| Two clients A and B are interested in editing the resource | Two clients A and B are interested in editing the resource | |||
| 'index.html'. Client A is an HTTP client rather than a WebDAV | 'index.html'. Client A is an HTTP client rather than a WebDAV | |||
| client, and so does not know how to perform locking. | client, and so does not know how to perform locking. | |||
| skipping to change at page 29, line 30 ¶ | skipping to change at page 30, line 40 ¶ | |||
| atomic operation there's no guarantee this will work). | atomic operation there's no guarantee this will work). | |||
| A successful lock request to an unmapped URL MUST result in the | A successful lock request to an unmapped URL MUST result in the | |||
| creation of a locked (non-collection) resource with empty content. | creation of a locked (non-collection) resource with empty content. | |||
| Subsequently, a successful PUT request (with the correct lock token) | Subsequently, a successful PUT request (with the correct lock token) | |||
| provides the content for the resource. Note that the LOCK request | provides the content for the resource. Note that the LOCK request | |||
| has no mechanism for the client to provide Content-Type or Content- | has no mechanism for the client to provide Content-Type or Content- | |||
| Language, thus the server will use defaults or empty values and rely | Language, thus the server will use defaults or empty values and rely | |||
| on the subsequent PUT request for correct values. | on the subsequent PUT request for correct values. | |||
| A resource created with a LOCK is empty but otherwise behaves in | ||||
| every way as a normal resource. It behaves the same way as a | ||||
| resource created by a PUT request with an empty body (and where a | ||||
| Content-Type and Content-Language was not specified), followed by a | ||||
| LOCK request to the same resource. Following from this model, a | ||||
| locked empty resource: | ||||
| o Can be read, deleted, moved, copied, and in all ways behave as a | ||||
| regular non-collection resource. | ||||
| o Appears as a member of its parent collection. | ||||
| o SHOULD NOT disappear when its lock goes away (clients must | ||||
| therefore be responsible for cleaning up their own mess, as with | ||||
| any other operation or any non-empty resource) | ||||
| o MAY NOT have values for properties like DAV:getcontentlanguage | ||||
| which haven't been specified yet by the client. | ||||
| o Can be updated (have content added) with a PUT request. | ||||
| o MUST NOT be converted into a collection. The server MUST fail a | ||||
| MKCOL request (as it would with a MKCOL request to any existing | ||||
| non-collection resource). | ||||
| o MUST have defined values for DAV:lockdiscovery and DAV: | ||||
| supportedlock properties. | ||||
| o The response MUST indicate that a resource was created, by use of | ||||
| the "201 Created" response code (a LOCK request to an existing | ||||
| resource instead will result in 200 OK). The body must still | ||||
| include the DAV:lockdiscovery property, as with a LOCK request to | ||||
| an existing resource. | ||||
| The client is expected to update the locked empty resource shortly | ||||
| after locking it, using PUT and possibly PROPPATCH. | ||||
| Alternatively and for backwards compatibility to [RFC2518], servers | Alternatively and for backwards compatibility to [RFC2518], servers | |||
| MAY implement Lock-Null Resources (LNRs) instead (see definition in | MAY implement Lock-Null Resources (LNRs) instead (see definition in | |||
| Appendix D). Clients can easily interoperate both with servers that | Appendix D). Clients can easily interoperate both with servers that | |||
| support the old model LNRs and the recommended model of "locked empty | support the old model LNRs and the recommended model of "locked empty | |||
| resources" by only attempting PUT after a LOCK to an unmapped URL, | resources" by only attempting PUT after a LOCK to an unmapped URL, | |||
| not MKCOL or GET, and by not relying on specific properties of LNRs. | not MKCOL or GET, and by not relying on specific properties of LNRs. | |||
| 7.4. Write Locks and Collections | 7.4. Write Locks and Collections | |||
| There are two kinds of collection write locks. A depth-0 write lock | There are two kinds of collection write locks. A depth-0 write lock | |||
| on a collection protects the collection properties plus the internal | on a collection protects the collection properties plus the internal | |||
| member URLs of that one collection, while not protecting the content | member URLs of that one collection, while not protecting the content | |||
| or properties of member resources (if the collection itself has any | or properties of member resources (if the collection itself has any | |||
| entity bodies, those are also protected). A depth-infinity write | entity bodies, those are also protected). A depth-infinity write | |||
| lock on a collection provides the same protection on that collection | lock on a collection provides the same protection on that collection | |||
| and also provides write lock protection on every member resource. | and also provides write lock protection on every member resource. | |||
| Expressed otherwise, a write lock protects any request that would | Expressed otherwise, a write lock of either kind protects any request | |||
| create a new resource in a write locked collection, any request that | that would create a new resource in a write locked collection, any | |||
| would remove an internal member URL of a write locked collection, and | request that would remove an internal member URL of a write locked | |||
| any request that would change the segment name of any internal | collection, and any request that would change the segment name of any | |||
| member. | internal member. | |||
| Thus, a collection write lock protects all the following actions: | Thus, a collection write lock protects all the following actions: | |||
| o DELETE a collection's direct internal member, | o DELETE a collection's direct internal member, | |||
| o MOVE an internal member out of the collection, | o MOVE an internal member out of the collection, | |||
| o MOVE an internal member into the collection, | o MOVE an internal member into the collection, | |||
| o MOVE to rename an internal member within a collection, | o MOVE to rename an internal member within a collection, | |||
| skipping to change at page 31, line 4 ¶ | skipping to change at page 31, line 24 ¶ | |||
| Thus, a collection write lock protects all the following actions: | Thus, a collection write lock protects all the following actions: | |||
| o DELETE a collection's direct internal member, | o DELETE a collection's direct internal member, | |||
| o MOVE an internal member out of the collection, | o MOVE an internal member out of the collection, | |||
| o MOVE an internal member into the collection, | o MOVE an internal member into the collection, | |||
| o MOVE to rename an internal member within a collection, | o MOVE to rename an internal member within a collection, | |||
| o COPY an internal member into a collection, and | o COPY an internal member into a collection, and | |||
| o PUT or MKCOL request which would create a new internal member. | o PUT or MKCOL request which would create a new internal member. | |||
| [[anchor21: ... (or simply drop the list, since it does not contain | ||||
| anything new). --Manfred Baedke]] | ||||
| 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 members of the locked collection. With a depth-infinity lock, | all members of the locked collection. With a depth-infinity lock, | |||
| the resource identified by the root of the lock is directly locked, | the resource identified by the root of the lock is directly locked, | |||
| and all its members are indirectly locked. | and all its members are indirectly locked. | |||
| o Any new resource added as a descendent of a depth-infinity locked | o Any new resource added as a descendent of a depth-infinity locked | |||
| collection becomes indirectly locked. | collection becomes indirectly locked. | |||
| skipping to change at page 34, line 13 ¶ | skipping to change at page 34, line 47 ¶ | |||
| the resource will be added to that collection's lock. Additionally, | the resource will be added to that collection's lock. Additionally, | |||
| if a resource with a depth-infinity lock is moved to a destination | if a resource with a depth-infinity lock is moved to a destination | |||
| that is within the scope of the same lock (e.g., within the URL | that is within the scope of the same lock (e.g., within the URL | |||
| namespace tree covered by the lock), the moved resource will again be | namespace tree covered by the lock), the moved resource will again be | |||
| a added to the lock. In both these examples, as specified in | a added to the lock. In both these examples, as specified in | |||
| Section 7.5, an If header must be submitted containing a lock token | Section 7.5, an If header must be submitted containing a lock token | |||
| for both the source and destination. | for both the source and destination. | |||
| 7.7. Refreshing Write Locks | 7.7. Refreshing Write Locks | |||
| A client MUST NOT submit the same write lock request twice. Note | [[anchor26: IMHO all of this can go. This paragraph is just | |||
| that a client is always aware it is resubmitting the same lock | misleading; repeating a LOCK request with an existing lock token in | |||
| request because it must include the lock token in the If header in | the If header is going to fail for an exclusive lock anway.]] | |||
| order to make the request for a resource that is already locked. | ||||
| However, a client may submit a LOCK request with an If header but | ||||
| without a body. A server receiving a LOCK request with no body MUST | ||||
| NOT create a new lock -- this form of the LOCK request is only to be | ||||
| used to "refresh" an existing lock (meaning, at minimum, that any | ||||
| timers associated with the lock MUST be re-set). | ||||
| Clients may submit Timeout headers of arbitrary value with their lock | ||||
| refresh requests. Servers, as always, may ignore Timeout headers | ||||
| submitted by the client, and a server MAY refresh a lock with a | ||||
| timeout period that is different than the previous timeout period | ||||
| used for the lock, provided it advertises the new value in the LOCK | ||||
| refresh response. | ||||
| If an error is received in response to a refresh LOCK request the | [[anchor27: Just point to the paragraph in the LOCK definition | |||
| client MUST NOT assume that the lock was refreshed. | here.]] | |||
| 8. General Request and Response Handling | 8. General Request and Response Handling | |||
| 8.1. Precedence in Error Handling | 8.1. Precedence in Error Handling | |||
| Servers MUST return authorization errors in preference to other | Servers MUST return authorization errors in preference to other | |||
| errors. This avoids leaking information about protected resources | errors. This avoids leaking information about protected resources | |||
| (e.g. a client that finds that a hidden resource exists by seeing a | (e.g. a client that finds that a hidden resource exists by seeing a | |||
| 423 Locked response to an anonymous request to the resource). | 423 Locked response to an anonymous request to the resource). | |||
| skipping to change at page 37, line 29 ¶ | skipping to change at page 38, line 29 ¶ | |||
| 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 the client | extension) that the body could not be processed as the client | |||
| intended. | intended. | |||
| 8.5. HTTP Headers for use in WebDAV | 8.5. 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. | |||
| Date header in all responses if possible (see Section 14.18, | ||||
| [RFC2616]). | ||||
| The server MUST do authorization checks before checking any HTTP | The server MUST do authorization checks before checking any HTTP | |||
| conditional header. | conditional header. | |||
| 8.6. ETag | 8.6. ETag | |||
| HTTP 1.1 recommends the use of ETags rather than modification dates, | HTTP 1.1 recommends the use of ETags rather than modification dates, | |||
| for cache-control, and there are even stronger reasons to prefer | for cache-control, and there are even stronger reasons to prefer | |||
| ETags for authoring. Correct use of ETags is even more important in | ETags for authoring. Correct use of ETags is even more important in | |||
| a distributed authoring environment, because ETags are necessary | a distributed authoring environment, because ETags are necessary | |||
| skipping to change at page 38, line 24 ¶ | skipping to change at page 39, line 23 ¶ | |||
| Note that the meaning of an ETag in a PUT response is not clearly | Note that the meaning of an ETag in a PUT response is not clearly | |||
| defined either in this document or in RFC2616 (i.e., whether the ETag | defined either in this document or in RFC2616 (i.e., whether the ETag | |||
| means that the resource is octet-for-octet equivalent to the body of | means that the resource is octet-for-octet equivalent to the body of | |||
| the PUT request, or whether the server could have made minor changes | the PUT request, or whether the server could have made minor changes | |||
| in the formatting or content of the document upon storage). This is | in the formatting or content of the document upon storage). This is | |||
| an HTTP issue, not purely a WebDAV issue. | an HTTP issue, not purely a WebDAV issue. | |||
| 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 the Last-Modified time) for a resource that has an unchanged | ETag (or the Last-Modified time) for a resource that has an unchanged | |||
| body and location. The ETag represents the state of the body or | body and location. The ETag represents the state of the entity body | |||
| contents of the resource. There is no similar way to tell if | of the resource. There is no similar way to tell if properties have | |||
| properties have changed. | changed. | |||
| 8.7. Including Error Response Bodies | 8.7. 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 the specification for Versioning | machine-parsable information until the specification for Versioning | |||
| Extensions to WebDAV introduced a mechanism to include more specific | Extensions to WebDAV introduced a mechanism to include more specific | |||
| information in the body of an error response (Section 1.6 of | information in the body of an error response (Section 1.6 of | |||
| [RFC3253]). The error body mechanism is appropriate to use with any | [RFC3253]). The error body mechanism is appropriate to use with any | |||
| error response that may take a body but does not already have a body | error response that may take a body but does not already have a body | |||
| defined. The mechanism is particularly appropriate when a status | defined. The mechanism is particularly appropriate when a status | |||
| skipping to change at page 40, line 18 ¶ | skipping to change at page 41, line 18 ¶ | |||
| 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 14.20) along with all XML elements defined for use with that | (Section 14.20) along with all XML elements defined for use with that | |||
| element. | element. | |||
| A client MUST 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 request. Servers MUST support "0" and "1" | "infinity" with a PROPFIND request. Servers MUST support "0" and "1" | |||
| depth requests on WebDAV-compliant resources and SHOULD support | depth requests on WebDAV-compliant resources and SHOULD support | |||
| "infinity" requests. In practice, support for infinite depth | "infinity" requests. In practice, support for infinite depth | |||
| requests MAY be disabled, due to the performance and security | requests MAY be disabled, due to the performance and security | |||
| concerns associated with this behavior. Since clients weren't | concerns associated with this behavior. By default, the PROPFIND | |||
| required to include the Depth header in [RFC2518], servers SHOULD | method without a Depth header MUST act as if a "Depth: infinity" | |||
| treat such a request as if a "Depth: infinity" header was included. | header was included. | |||
| A client may submit a 'propfind' XML element in the body of the | A client may submit a 'propfind' XML element in the body of the | |||
| request 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 property values for those properties defined in this | o Request property values for those properties defined in this | |||
| skipping to change at page 41, line 45 ¶ | skipping to change at page 42, line 45 ¶ | |||
| validation mechanism for most properties. This method is both safe | validation mechanism for most properties. This method is both safe | |||
| and idempotent (see Section 9.1 of [RFC2616]). | and idempotent (see Section 9.1 of [RFC2616]). | |||
| 9.1.1. PROPFIND Status Codes | 9.1.1. PROPFIND Status Codes | |||
| This section, as with similar sections for other methods, provides | This section, as with similar sections for other methods, provides | |||
| some guidance on error codes and preconditions or postconditions | some guidance on error codes and preconditions or postconditions | |||
| (defined in Section 16) that might be particularly useful with | (defined in Section 16) that might be particularly useful with | |||
| PROPFIND. | PROPFIND. | |||
| 403 Forbidden - A server MAY reject PROPFIND requests on collections | 403 Forbidden (with the condition code 'propfind-finite-depth' | |||
| with depth header of "Infinity", in which case it SHOULD use this | defined in Section 16) - A server MAY reject PROPFIND requests with | |||
| error with the precondition code 'propfind-finite-depth' inside the | depth header of "Infinity". | |||
| error body. | ||||
| 9.1.2. Status Codes for Use in 'propstat' Element | 9.1.2. Status Codes for Use in 'propstat' Element | |||
| In PROPFIND responses, information about individual properties is | In PROPFIND responses, information about individual properties is | |||
| returned inside 'propstat' elements (see Section 14.22), each | returned inside 'propstat' elements (see Section 14.22), each | |||
| containing an individual 'status' element containing information | containing an individual 'status' element containing information | |||
| about the properties appearing in it. The list below summarizes the | about the properties appearing in it. The list below summarizes the | |||
| most common status codes used inside 'propstat', however clients | most common status codes used inside 'propstat', however clients | |||
| should be prepared to handle other 2/3/4/5xx series status codes as | should be prepared to handle other 2/3/4/5xx series status codes as | |||
| well. | well. | |||
| skipping to change at page 49, line 46 ¶ | skipping to change at page 50, line 46 ¶ | |||
| 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. | propertyupdate XML element. | |||
| Servers MUST process PROPPATCH instructions in document order (an | Servers MUST process the child elements of the propertyupdate XML | |||
| exception to the normal rule that ordering is irrelevant). | element in the order they appear in the request body (an exception to | |||
| Instructions MUST either all be executed or none executed. Thus if | the normal rule that ordering is irrelevant). Instructions MUST | |||
| any error occurs during processing all executed instructions MUST be | either all be executed or none executed. Thus if any error occurs | |||
| undone and a proper error result returned. Instruction processing | during processing all executed instructions MUST be undone and a | |||
| details can be found in the definition of the set and remove | proper error result returned. Instruction processing details can be | |||
| instructions in Section 14.23 and Section 14.26. | found in the definition of the set and remove instructions in | |||
| Section 14.23 and Section 14.26. | ||||
| If a server attempts to make any of the property changes in a | The response to a PROPPATCH request can be in two different formats: | |||
| PROPPATCH request (i.e. the request is not rejected for high-level | should the server reject the request altogether (because of missing | |||
| errors before processing the body), the response MUST be a Multi- | access rights, failed conditional headers, malformed request syntax, | |||
| Status response as described in Section 9.2.1. | etc.), the status SHOULD be non-2xx HTTP status. On the other hand, | |||
| if the server did attempt the property modification, the response | ||||
| status SHOULD be 207 Multistatus, using the 'multistatus' response | ||||
| body format defined below (Section 9.2.1). | ||||
| This method is idempotent, but not safe (see Section 9.1 of | This method is idempotent, but not safe (see Section 9.1 of | |||
| [RFC2616]). Responses to this method MUST NOT be cached. | [RFC2616]). Responses to this method MUST NOT be cached. | |||
| 9.2.1. Status Codes for Use in 'propstat' Element | 9.2.1. Status Codes for Use in 'propstat' Element | |||
| In PROPPATCH responses, information about individual properties is | In PROPPATCH responses, information about individual properties is | |||
| returned inside 'propstat' elements (see Section 14.22), each | returned inside 'propstat' elements (see Section 14.22), each | |||
| containing an individual 'status' element containing information | containing an individual 'status' element containing information | |||
| about the properties appearing in it. The list below summarizes the | about the properties appearing in it. The list below summarizes the | |||
| skipping to change at page 50, line 30 ¶ | skipping to change at page 51, line 34 ¶ | |||
| should be prepared to handle other 2/3/4/5xx series status codes as | should be prepared to handle other 2/3/4/5xx series status codes as | |||
| well. | well. | |||
| 200 (OK) - The property set or change succeeded. Note that if this | 200 (OK) - The property set or change succeeded. Note that if this | |||
| appears for one property, it appears for every property in the | appears for one property, it appears for every property in the | |||
| response, due to the atomicity of PROPPATCH. | 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 protected | 403 (Forbidden) (with the condition code 'cannot-modify-protected- | |||
| property, such as DAV:getetag. If returning this error, the server | property' defined in Section 16) - The client has attempted to set a | |||
| SHOULD use the precondition code 'cannot-modify-protected-property' | protected property, such as DAV:getetag. | |||
| 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. | |||
| 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. | |||
| skipping to change at page 53, line 28 ¶ | skipping to change at page 54, line 28 ¶ | |||
| 9.3.1. MKCOL Status Codes | 9.3.1. MKCOL Status Codes | |||
| In addition to the general status codes possible, the following | In addition to the general status codes possible, the following | |||
| status codes have specific applicability to MKCOL: | 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 URL 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. [[anchor36: Language? | |||
| I think it can indicate lots of other things.]] | ||||
| 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 | ||||
| request body type (although bodies are legal on MKCOL requests, since | ||||
| this specification doesn't define any, the server is likely not to | ||||
| support any given body type). | ||||
| 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. | |||
| 9.3.2. Example - MKCOL | 9.3.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. | |||
| >>Request | >>Request | |||
| skipping to change at page 54, line 36 ¶ | skipping to change at page 55, line 31 ¶ | |||
| message body, the semantics of HEAD are unmodified when applied to | message body, the semantics of HEAD are unmodified when applied to | |||
| collection resources. | collection resources. | |||
| 9.5. POST for Collections | 9.5. 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. | |||
| [[anchor40: The fact that it's undefined in RF2616 really wouldn't | ||||
| stop us to define it, I think.]] | ||||
| 9.6. DELETE Requirements | 9.6. DELETE Requirements | |||
| DELETE is defined in [RFC2616], Section 9.7, to "delete the resource | DELETE is defined in [RFC2616], Section 9.7, to "delete the resource | |||
| identified by the Request-URI". However, WebDAV changes some DELETE | identified by the Request-URI". However, WebDAV changes some DELETE | |||
| handling requirements. | handling requirements. | |||
| A server processing a successful DELETE request: | A server processing a successful DELETE request: | |||
| MUST destroy locks rooted on the deleted resource | o MUST destroy those locks where the lock root is the Request-URI. | |||
| MUST remove the mapping from the Request-URI to any resource. | o MUST remove the mapping from the Request-URI to any resource. | |||
| Thus, after a successful DELETE operation (and in the absence of | Thus, after a successful DELETE operation (and in the absence of | |||
| other actions) a subsequent GET/HEAD/PROPFIND request to the target | other actions) a subsequent GET/HEAD/PROPFIND request to the target | |||
| Request-URI MUST return 404 (Not Found). | Request-URI MUST return 404 (Not Found). | |||
| 9.6.1. DELETE for Collections | 9.6.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. | |||
| skipping to change at page 55, line 29 ¶ | skipping to change at page 56, line 29 ¶ | |||
| 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 URL namespace. | consistent URL namespace. | |||
| If an error occurs deleting a member resource (a resource other than | If an error occurs deleting a member resource (a resource other than | |||
| the resource identified in the Request-URI) then the response can be | the resource identified in the Request-URI) then the response can be | |||
| a 207 (Multi-Status). Multi-Status is used here to indicate which | a 207 (Multi-Status). Multi-Status is used here to indicate which | |||
| internal resources could NOT be deleted, including an error code | internal resources could NOT be deleted, including an error code | |||
| which should help the client understand which resources caused the | which should help the client understand what caused the failure. For | |||
| failure. For example, the Multi-Status body could include a response | example, the Multi-Status body could include a response with status | |||
| with status 423 (Locked) if an internal resource was locked. | 423 (Locked) if an internal resource was locked. | |||
| The server MAY return a 4xx status response, rather than a 207, if | The server MAY return a 4xx status response, rather than a 207, if | |||
| the request failed completely. | the request failed completely. | |||
| 424 (Failed Dependency) status codes 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 | |||
| skipping to change at page 56, line 43 ¶ | skipping to change at page 57, line 43 ¶ | |||
| A PUT performed on an existing resource replaces the GET response | A PUT performed on an existing resource replaces the GET response | |||
| entity of the resource. Properties defined on the resource may be | entity of the resource. Properties defined on the resource may be | |||
| recomputed during PUT processing but are not otherwise affected. For | recomputed during PUT processing but are not otherwise affected. For | |||
| 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). [[anchor43: What does 'appropiately scoped' mean here. | |||
| Since there is the defined term 'namespace consistency', it should be | ||||
| used here. --Manfred Baedke]] | ||||
| A PUT request allows a client to indicate what media type an entity | A PUT request allows a client to indicate what media type an entity | |||
| body has, and whether it should change if overwritten. Thus, a | body has, and whether it should change if overwritten. Thus, a | |||
| client SHOULD provide a Content-Type for a new resource if any is | client SHOULD provide a Content-Type for a new resource if any is | |||
| known. If the client does not provide a Content-Type for a new | known. If the client does not provide a Content-Type for a new | |||
| resource, the server MAY create a resource with no Content-Type | resource, the server MAY create a resource with no Content-Type | |||
| assigned, or it MAY attempt to assign a Content-Type. | assigned, or it MAY attempt to assign a Content-Type. | |||
| Note that although a recipient ought generally to treat metadata | Note that although a recipient ought generally to treat metadata | |||
| supplied with an HTTP request as authoritative, in practice there's | supplied with an HTTP request as authoritative, in practice there's | |||
| no guarantee that a server will accept client-supplied metadata (e.g. | no guarantee that a server will accept client-supplied metadata (e.g. | |||
| any request header beginning with "Content-"). Many servers do not | any request header beginning with "Content-"). Many servers do not | |||
| allow configuring the Content-Type on a per-resource basis in the | allow configuring the Content-Type on a per-resource basis in the | |||
| first place. Thus, clients can't always rely on the ability to | first place. Thus, clients can't always rely on the ability to | |||
| directly influence the content type by including a Content-Type | directly influence the content type by including a Content-Type | |||
| request header. | request header. [[anchor44: (1) We shouldn't say "ought generally", | |||
| when the TAG says it's a SHOULD. (2) I think extending this to | ||||
| heeaders other than Content-Type is just confusing here.]] | ||||
| 9.7.2. PUT for Collections | 9.7.2. PUT for Collections | |||
| This specification does not define the behavior of the PUT method for | This specification does not define the behavior of the PUT method for | |||
| existing collections. A PUT request to an existing collection MAY be | existing collections. A PUT request to an existing collection MAY be | |||
| treated as an error (405 Method Not Allowed). | treated as an error (405 Method Not Allowed). | |||
| The MKCOL method is defined to create collections. | The MKCOL method is defined to create collections. | |||
| 9.8. COPY Method | 9.8. COPY Method | |||
| skipping to change at page 63, line 36 ¶ | skipping to change at page 64, line 36 ¶ | |||
| cases, a successful MOVE might result in the property being reported | cases, a successful MOVE might result in the property being reported | |||
| as "Not Found" in subsequent requests. If the live properties will | as "Not Found" in subsequent requests. If the live properties will | |||
| not work the same way at the destination, the server MAY fail the | not work the same way at the destination, the server MAY fail the | |||
| request. | 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 all live | its parent collection, so it's not appropriate to reset all live | |||
| properties which are set at resource creation. For example, the DAV: | 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 SHOULD be moved along with the resource. | |||
| 9.9.2. MOVE for Collections | 9.9.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" | |||
| skipping to change at page 64, line 43 ¶ | skipping to change at page 65, line 43 ¶ | |||
| NOT be returned as values in 207 (Multi-Status) responses from a | NOT be returned as values in 207 (Multi-Status) responses from a | |||
| MOVE. These responses can be safely omitted because they are the | MOVE. These responses can be safely omitted because they are the | |||
| default success codes. | default success codes. | |||
| 9.9.3. MOVE and the Overwrite Header | 9.9.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. | |||
| [[anchor53: Though it is defined later, mentioning the default here | ||||
| might be clearer. --Manfred Baedke]] | ||||
| 9.9.4. Status Codes | 9.9.4. Status Codes | |||
| In addition to the general status codes possible, the following | In addition to the general status codes possible, the following | |||
| status codes have specific applicability to MOVE: | 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 | |||
| URL mapping 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 | |||
| skipping to change at page 67, line 24 ¶ | skipping to change at page 68, line 24 ¶ | |||
| 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. | |||
| This method is neither idempotent nor safe (see Section 9.1 of | This method is neither idempotent nor safe (see Section 9.1 of | |||
| [RFC2616]). Responses to this method MUST NOT be cached. | [RFC2616]). Responses to this method MUST NOT be cached. | |||
| 9.10.1. Creating a Lock on an Existing Resource | 9.10.1. Creating a Lock on an Existing Resource | |||
| A LOCK request to an existing resource will create a lock on the | A LOCK request to an existing resource will create a lock on the | |||
| resource identified by the Request-URI, provided the resource is not | resource identified by the Request-URI, provided the resource is not | |||
| already locked with a conflicting lock. The resource identified in | already locked with a conflicting lock. The Request-URI becomes the | |||
| the Request-URI becomes the root of the lock. Lock method requests | root of the lock. Lock method requests to create a new lock MUST | |||
| to create a new lock MUST have an XML request body. The server MUST | have an XML request body. The server MUST preserve the information | |||
| preserve the information provided by the client in the 'owner' field | provided by the client in the 'owner' XML element. The LOCK request | |||
| in the request body when the lock information is requested. The LOCK | MAY have a Timeout header. | |||
| request MAY have a Timeout header. | ||||
| When a new lock is created, the LOCK response: | When a new lock is created, the LOCK response: | |||
| o MUST contain a body with the value of the DAV:lockdiscovery | o MUST contain a body with the value of the DAV:lockdiscovery | |||
| property in a prop XML element. This MUST contain the full | property in a prop XML element. This MUST contain the full | |||
| information about the lock just granted, while information about | information about the lock just granted, while information about | |||
| other (shared) locks is OPTIONAL. | other (shared) locks is OPTIONAL. | |||
| o 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. | |||
| skipping to change at page 68, line 43 ¶ | skipping to change at page 69, line 42 ¶ | |||
| (Locked)). Additionally, if the resource causing the failure was not | (Locked)). Additionally, if the resource causing the failure was not | |||
| the resource requested, then the server SHOULD include a 'response' | the resource requested, then the server SHOULD include a 'response' | |||
| element for the Request-URI as well, with a 'status' element | element for the Request-URI as well, with a 'status' element | |||
| containing 424 Failed Dependency. | 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. | |||
| 9.10.4. Locking Unmapped URLs | 9.10.4. Locking Unmapped URLs | |||
| A successful LOCK method MUST result in the creation of an empty | A successful LOCK request to an unmapped URL causes that URL to | |||
| resource which is locked (and which is not a collection), when a | become mapped, and the new resource being referred to being locked. | |||
| resource did not previously exist at that URL. Later on, the lock | See Section 7.3 for further details. | |||
| may go away but the empty resource remains. Empty resources MUST | ||||
| then appear in PROPFIND responses including that URL in the response | ||||
| scope. A server MUST respond successfully to a GET request to an | ||||
| empty resource, either by using a 204 No Content response, or by | ||||
| using 200 OK with a Content-Length header indicating zero length | ||||
| 9.10.5. Lock Compatibility Table | 9.10.5. 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 OK | Exclusive Lock OK | | | Current State | Shared Lock OK | Exclusive Lock OK | | |||
| +--------------------------+----------------+-------------------+ | +--------------------------+----------------+-------------------+ | |||
| | None | True | True | | | None | True | True | | |||
| skipping to change at page 70, line 5 ¶ | skipping to change at page 70, line 48 ¶ | |||
| 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), potentially with 'no-conflicting-lock' precondition | 423 (Locked), potentially with 'no-conflicting-lock' precondition | |||
| code - There is already a lock on the resource which is not | code - There is already a lock on the resource which is not | |||
| compatible with the requested lock (see lock compatibility table | compatible with the requested lock (see lock compatibility table | |||
| above). | above). | |||
| 412 (Precondition Failed), with 'lock-token-matches-request-uri' | 412 (Precondition Failed), with 'lock-token-submitted' precondition | |||
| precondition code - The LOCK request was made with a If header, | code - The LOCK request was made with an If header, indicating that | |||
| indicating that the client wishes to refresh the given lock. | the client wishes to refresh the given lock. However, the Request- | |||
| However, the Request-URI did not fall within the scope of the lock | URI did not fall within the scope of the lock identified by the | |||
| identified by the token. The lock may have a scope that does not | token. The lock may have a scope that does not include the Request- | |||
| include the Request-URI, or the lock could have disappeared, or the | URI, or the lock could have disappeared, or the token may be invalid. | |||
| token may be invalid. | ||||
| 9.10.7. Example - Simple Lock Request | 9.10.7. 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: application/xml; charset="utf-8" | Content-Type: application/xml; charset="utf-8" | |||
| Content-Length: xxxx | Content-Length: xxxx | |||
| skipping to change at page 74, line 27 ¶ | skipping to change at page 75, line 27 ¶ | |||
| 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. | resource within the scope of the lock. | |||
| Note that use of Lock-Token header to provide the lock token is not | 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 | consistent with other state-changing methods which all require an If | |||
| header with the lock token. Thus, the If header is not needed to | 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 | provide the lock token. Naturally when the If header is present it | |||
| has its normal meaning as a conditional header. | has its normal meaning as a conditional header. | |||
| For a successful response to this method, the server MUST delete the | For a successful response to this method, the server MUST remove the | |||
| lock entirely. | lock from the resource identified by the Request-URI and from all | |||
| 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. | |||
| skipping to change at page 76, line 17 ¶ | skipping to change at page 77, line 17 ¶ | |||
| 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: | WebDAV adds two new conditional headers to the set defined in HTTP: | |||
| the If and Overwrite headers. | the If and Overwrite headers. | |||
| 10.1. DAV Header | 10.1. DAV Header | |||
| DAV = "DAV" ":" #( compliance-class ) | DAV = "DAV" ":" #( compliance-class ) | |||
| compliance-class = ( "1" | "2" | "3" | extend ) | compliance-class = ( "1" | "2" | "3" | extend ) | |||
| extend = Coded-URL | token | extend = Coded-URL | token | |||
| Coded-URL = "<" absolute-URI ">" | ; token: defined in [RFC2616], Section 2.2 | |||
| ; No linear white space (LWS) allowed in Coded-URL | Coded-URL = "<" absolute-URI ">" | |||
| ; absolute-URI is defined in RFC3986 | ; No Linear White Space (LWS) allowed in | |||
| ; Coded-URL | ||||
| ; absolute-URI: defined in [RFC3986], Section 4.3 | ||||
| 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 with compliance-class | compliant resources MUST return the DAV header with compliance-class | |||
| "1" on all OPTIONS responses. In cases where WebDAV is only | "1" on all OPTIONS responses. In cases where WebDAV is only | |||
| supported in part of the server namespace, an OPTIONS request to non- | supported in part of the server namespace, an OPTIONS request to non- | |||
| WebDAV resources (including "/") SHOULD NOT advertise WebDAV support. | WebDAV resources (including "/") SHOULD NOT advertise WebDAV support. | |||
| 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. Identifiers can appear in | |||
| Coded-URLs or tokens (as defined by [RFC2616]). Identifiers can | any order. Identifiers that are standardized through the IETF RFC | |||
| appear in any order. Identifiers that are standardized through the | process are tokens, but other identifiers SHOULD be Coded-URLs to | |||
| IETF RFC process are tokens, but other identifiers SHOULD be Coded- | encourage uniqueness. | |||
| URLs to encourage uniqueness. | ||||
| A resource must show class 1 compliance if it shows class 2 or 3 | ||||
| compliance. In general, support for one compliance class does not | ||||
| entail support for any other, and in particular, support for | ||||
| compliance class 3 does not require support for compliance class 2. | ||||
| Please refer to Section 18 for more details on compliance classes | Please refer to Section 18 for more details on compliance classes | |||
| defined in this specification. | defined in this specification. | |||
| Note that many WebDAV servers do not advertise WebDAV support in | Note that many WebDAV servers do not advertise WebDAV support in | |||
| response to "OPTIONS *". | response to "OPTIONS *". | |||
| As a request header, this header allows the client to advertise | As a request header, this header allows the client to advertise | |||
| compliance with named features when the server needs that | compliance with named features when the server needs that | |||
| information. Clients SHOULD NOT send this header unless a standards | information. Clients SHOULD NOT send this header unless a standards | |||
| track specification requires it. Any extension that makes use of | track specification requires it. Any extension that makes use of | |||
| skipping to change at page 78, line 13 ¶ | skipping to change at page 79, line 11 ¶ | |||
| The Depth header only specifies the behavior of the method with | The Depth header only specifies the behavior of the method with | |||
| regards to internal members. If a resource does not have internal | regards to internal members. If a resource does not have internal | |||
| members then the Depth header MUST be ignored. | members then the Depth header MUST be ignored. | |||
| 10.3. Destination Header | 10.3. Destination Header | |||
| 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. | two URIs as parameters. | |||
| Destination = "Destination" ":" Simple-ref | Destination = "Destination" ":" Simple-ref (see Section 8.3) | |||
| If the Destination value is an absolute-URI (Section 4.3 of | If the Destination value is an absolute-URI (Section 4.3 of | |||
| [RFC3986]), it may name a different server (or different port or | [RFC3986]), it may name a different server (or different port or | |||
| scheme). If the source server cannot attempt a copy to the remote | scheme). If the source server cannot attempt a copy to the remote | |||
| server, it MUST fail the request. Note that copying and moving | server, it MUST fail the request[[anchor62: Yes. What else should the | |||
| server do? :) --Manfred Baedke]]. Note that copying and moving | ||||
| resources to remote servers is not fully defined in this | resources to remote servers is not fully defined in this | |||
| specification (e.g. specific error conditions). | specification (e.g. specific error conditions). | |||
| If the Destination value is too long or otherwise unacceptable, the | If the Destination value is too long or otherwise unacceptable, the | |||
| server SHOULD return 400 (Bad Request), ideally with helpful | server SHOULD return 400 (Bad Request), ideally with helpful | |||
| information in an error body. | information in an error body. | |||
| 10.4. If Header | 10.4. If Header | |||
| 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]. However | the If-Match header defined in Section 14.24 of [RFC2616]. However | |||
| the If header handles any state token as well as ETags. A typical | the If header handles any state token as well as ETags. A typical | |||
| example of a state token is a lock token, and lock tokens are the | example of a state token is a lock token, and lock tokens are the | |||
| only state tokens defined in this specification. | only state tokens defined in this specification. | |||
| 10.4.1. Purpose | 10.4.1. Purpose | |||
| The If header has two distinct purposes: | The If header has two distinct purposes: | |||
| o The first purpose is to make a request conditional by supplying a | o The first purpose is to make a request conditional by supplying a | |||
| series of state lists with conditions that match tokens and ETags | series of state lists. If none of the state lists match the state | |||
| to specific resource. If this header is evaluated and all state | of the resource it applies to, the request MUST fail with a 412 | |||
| lists fail, then the request MUST fail with a 412 (Precondition | (Precondition Failed) status. Otherwise, the request may succeed. | |||
| Failed) status. On the other hand, the request can succeed only | The matching functions for ETags and state tokens are defined in | |||
| if one of the described state lists succeeds. The success | Section 10.4.4 below. | |||
| criteria for state lists and matching functions are defined in | ||||
| Section 10.4.3 and Section 10.4.4. | ||||
| o Additionally, the mere fact that a state token appears in an If | o Additionally, the mere fact that a state token appears in an If | |||
| header means that it has been "submitted" with the request. In | header means that it has been "submitted" with the request. In | |||
| general, this is used to indicate that the client has knowledge of | general, this is used to indicate that the client has knowledge of | |||
| that state token. The semantics for submitting a state token | that state token. The semantics for submitting a state token | |||
| depend on its type (for lock tokens, please refer to Section 6). | depend on its type (for lock tokens, please refer to Section 6). | |||
| Note that these two purposes need to be treated distinctly: a state | Note that these two purposes need to be treated distinctly: a state | |||
| token counts as being submitted independently of whether the server | token counts as being submitted independently of whether the server | |||
| actually has evaluated the state list it appears in, and also | actually has evaluated the state list it appears in, and also | |||
| skipping to change at page 80, line 5 ¶ | skipping to change at page 80, line 48 ¶ | |||
| Each List consists of one or more Conditions. Each Condition is | Each List consists of one or more Conditions. Each Condition is | |||
| defined in terms of an entity-tag or state-token, potentially negated | defined in terms of an entity-tag or state-token, potentially negated | |||
| by the prefix "Not". | by the prefix "Not". | |||
| Note that the If header syntax does not allow multiple instances of | Note that the If header syntax does not allow multiple instances of | |||
| If headers in a single request. However, the HTTP header syntax | If headers in a single request. However, the HTTP header syntax | |||
| allows extending single header values across multiple lines, by | allows extending single header values across multiple lines, by | |||
| inserting a line break followed by whitespace (see [RFC2616], Section | inserting a line break followed by whitespace (see [RFC2616], Section | |||
| 4.2). | 4.2). | |||
| 10.4.3. List Evaluation | 10.4.3. Evaluation | |||
| A Condition that consists of a single entity-tag or state-token | A Condition that consists of a single entity-tag or state-token | |||
| evaluates to true if the resource matches the described state (where | evaluates to true if the resource matches the described state (where | |||
| the individual matching functions are defined below in | the individual matching functions are defined below in | |||
| Section 10.4.4). Prefixing it with "Not" reverses the result of the | Section 10.4.4). Prefixing it with "Not" reverses the result of the | |||
| evaluation (thus, the "Not" applies only to the subsequent entity-tag | evaluation (thus, the "Not" applies only to the subsequent entity-tag | |||
| or state-token). | or state-token). | |||
| Each List production describes a series of conditions. The whole | Each List production describes a series of conditions. The whole | |||
| list evaluates to true if and only if each condition evaluates to | list evaluates to true if and only if each condition evaluates to | |||
| skipping to change at page 80, line 49 ¶ | skipping to change at page 81, line 44 ¶ | |||
| 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. Servers MUST use either the | associated with the identified resource. Servers MUST use either the | |||
| weak or the strong comparison function defined in Section 13.3.3 of | weak or the strong comparison function defined in Section 13.3.3 of | |||
| [RFC2616]. | [RFC2616]. | |||
| Matching state token: Where there is an exact match between the state | Matching state token: Where there is an exact match between the state | |||
| token in the If header and any state token on the identified | token in the If header and any state token on the identified | |||
| resource. A lock state token is considered to match if the resource | resource. A lock state token is considered to match if the resource | |||
| is anywhere in the scope of the lock. | is anywhere in the scope of the lock. | |||
| Handling unmapped URLs: for both ETags and state tokens, treat as if | Note that for the purpose of matching entity tags and state tokens, | |||
| the URL identified a resource that exists but does not have the | the URL being unmapped should be treated the same way as if the | |||
| specified state. | resource existed, but did not have the specified state. | |||
| 10.4.5. If Header and Non-DAV Aware Proxies | 10.4.5. 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 | |||
| client MUST use the "Cache-Control: no-cache" request header so as to | client MUST use the "Cache-Control: no-cache" request header 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-cache" | its cache. When dealing with HTTP/1.0 proxies the "Pragma: no-cache" | |||
| request header MUST be used for the same reason. | request header MUST be used for the same reason. | |||
| skipping to change at page 81, line 45 ¶ | skipping to change at page 82, line 40 ¶ | |||
| matches-etag("I am an ETag") | matches-etag("I am an ETag") | |||
| ) | ) | |||
| OR | OR | |||
| ( | ( | |||
| matches-etag("I am another ETag") | matches-etag("I am another ETag") | |||
| ) | ) | |||
| 10.4.7. Example - using "Not" with No-tag Production | 10.4.7. Example - using "Not" with No-tag Production | |||
| If: (Not <urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2> | If: (Not <urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2> | |||
| <urn:uuid:58f202ac-22cf-11d1-b12d-002035b29092>) | <urn:uuid:58f202ac-22cf-11d1-b12d-002035b29092>) | |||
| This If header requires that the resource must not be locked with a | This If header requires that the resource must not be locked with a | |||
| lock having the lock token | lock having the lock token | |||
| urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2 and must be locked by a | urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2 and must be locked by a | |||
| lock with the lock token | lock with the lock token | |||
| urn:uuid:58f202ac-22cf-11d1-b12d-002035b29092. | urn:uuid:58f202ac-22cf-11d1-b12d-002035b29092. | |||
| 10.4.8. Example - causing a Condition to always evaluate to True | 10.4.8. Example - causing a Condition to always evaluate to True | |||
| There may be cases where a client wishes to submit state tokens, but | There may be cases where a client wishes to submit state tokens, but | |||
| skipping to change at page 84, line 4 ¶ | skipping to change at page 84, line 48 ¶ | |||
| request to create a new lock. | request to create a new lock. | |||
| 10.6. Overwrite Header | 10.6. 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 a resource mapped to the destination URL during a COPY or | overwrite a resource mapped to the destination URL during a COPY 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 destination URL does map to a resource. | COPY or MOVE operation if the destination URL does map to a resource. | |||
| If the overwrite header is not included in a COPY or MOVE request | If the overwrite header is not included in a COPY or MOVE request | |||
| then the resource MUST treat the request as if it has an overwrite | then the resource MUST treat the request as if it has an overwrite | |||
| header of value "T". While the Overwrite header appears to duplicate | header of value "T". While the Overwrite header appears to duplicate | |||
| the functionality of using a "If-Match: *" header (see [RFC2616]), | the functionality of using a "If-Match: *" header (see [RFC2616]), | |||
| 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. The server MUST do authorization checks before checking this | code. The server MUST do authorization checks before checking this | |||
| or any conditional header. | header. | |||
| All DAV compliant resources MUST support the Overwrite header. | All DAV compliant resources MUST support the Overwrite header. | |||
| 10.7. Timeout Request Header | 10.7. Timeout Request Header | |||
| TimeOut = "Timeout" ":" 1#TimeType | TimeOut = "Timeout" ":" 1#TimeType | |||
| TimeType = ("Second-" DAVTimeOutVal | "Infinite") | TimeType = ("Second-" DAVTimeOutVal | "Infinite") | |||
| ; No LWS allowed within TimeType | ; No LWS allowed within TimeType | |||
| DAVTimeOutVal = 1*DIGIT | DAVTimeOutVal = 1*DIGIT | |||
| skipping to change at page 86, line 14 ¶ | skipping to change at page 87, line 14 ¶ | |||
| 12. Use of HTTP Status Codes | 12. Use of HTTP Status Codes | |||
| These HTTP codes are not redefined, but their use is somewhat | These HTTP codes are not redefined, but their use is somewhat | |||
| extended by WebDAV methods and requirements. In general, many HTTP | extended by WebDAV methods and requirements. In general, many HTTP | |||
| status codes can be used in response to any request, not just in | status codes can be used in response to any request, not just in | |||
| cases described in this document. Note also that WebDAV servers are | cases described in this document. Note also that WebDAV servers are | |||
| known to use 300-level redirect responses (and early interoperability | known to use 300-level redirect responses (and early interoperability | |||
| tests found clients unprepared to see those responses). A 300-level | tests found clients unprepared to see those responses). A 300-level | |||
| response MUST NOT be used when the server has created a new resource | response MUST NOT be used when the server has created a new resource | |||
| in response to the request. | in response to the request. [[anchor69: Don't we usually say "3xx | |||
| class" instead of "300-level"?]] | ||||
| 12.1. 412 Precondition Failed | 12.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" or "Overwrite" | Match, If-Modified-Since, etc.) or the "If" or "Overwrite" | |||
| conditional headers defined in this specification. If the server | conditional headers defined in this specification. If the server | |||
| evaluates a conditional header, and if that condition fails to hold, | evaluates a conditional header, and if that condition fails to hold, | |||
| then this error code MUST be returned. On the other hand, if the | then this error code MUST be returned. On the other hand, if the | |||
| client did not include a conditional header in the request, then the | client did not include a conditional header in the request, then the | |||
| server MUST NOT use this status code. | server MUST NOT use this status code. | |||
| 12.2. 414 Request-URI Too Long | ||||
| This status code is used in HTTP 1.1 only for Request-URIs, not URIs | ||||
| in other locations. | ||||
| 13. Multi-Status Response | 13. Multi-Status Response | |||
| A Multi-Status response conveys information about multiple resources | A Multi-Status response conveys information about multiple resources | |||
| in situations where multiple status codes might be appropriate. The | in situations where multiple status codes might be appropriate. The | |||
| default Multi-Status response body is a text/xml or application/xml | default Multi-Status response body is a text/xml or application/xml | |||
| HTTP entity with a 'multistatus' root element. Further elements | HTTP entity with a 'multistatus' root element. Further elements | |||
| contain 200, 300, 400, and 500 series status codes generated during | contain 200, 300, 400, and 500 series status codes generated during | |||
| the method invocation. 100 series status codes SHOULD NOT be recorded | the method invocation. 100 series status codes SHOULD NOT be recorded | |||
| in a 'response' XML element. | in a 'response' XML element. | |||
| skipping to change at page 88, line 18 ¶ | skipping to change at page 89, line 18 ¶ | |||
| normally take a Location header to indicate the new URI for the | normally take a Location header to indicate the new URI for the | |||
| single resource redirected from the Request-URI. Multi-Status | single resource redirected from the Request-URI. Multi-Status | |||
| responses contain many resource addresses, but the original | responses contain many resource addresses, but the original | |||
| definition in [RFC2518] did not have any place for the server to | definition in [RFC2518] did not have any place for the server to | |||
| provide the new URI for redirected resources. This specification | provide the new URI for redirected resources. This specification | |||
| does define a 'location' element for this information (see | does define a 'location' element for this information (see | |||
| Section 14.9). Servers MUST use this new element with redirect | Section 14.9). Servers MUST use this new element with redirect | |||
| responses in Multi-Status. | responses in Multi-Status. | |||
| Clients encountering redirected resources in Multi-Status MUST NOT | Clients encountering redirected resources in Multi-Status MUST NOT | |||
| rely on the 'location' element being present with a new URI. If the | rely on the 'location' element being present with a new URI. | |||
| [[anchor73: Inconsistency: if servers MUST include the location | ||||
| element, why can't clients rely on it being present???]] If the | ||||
| element is not present, the client MAY reissue the request to the | element is not present, the client MAY reissue the request to the | |||
| individual redirected resource, because the response to that request | individual redirected resource, because the response to that request | |||
| can be redirected with a Location header containing the new URI. | can be redirected with a Location header containing the new URI. | |||
| [[anchor74: Language: clients MAY do whatever they want. This is | ||||
| 13.3. Internal Status Codes | nothing normative.]] | |||
| Section 9.2.1, Section 9.1.2, Section 9.6.1, Section 9.8.3 and | ||||
| Section 9.9.2 define various status codes used in Multi-Status | ||||
| responses. This specification does not define the meaning of other | ||||
| status codes that could appear in these responses. | ||||
| 14. XML Element Definitions | 14. 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 [REC-XML]. The "Value" | type declaration using the format defined in [REC-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). Note that all of the elements defined | values of a PCDATA element). Note that all of the elements defined | |||
| here may be extended according to the rules defined in Section 17. | here may be extended according to the rules defined in Section 17. | |||
| All elements defined here are in the "DAV:" namespace. | All elements defined here are in the "DAV:" namespace. | |||
| skipping to change at page 90, line 46 ¶ | skipping to change at page 91, line 46 ¶ | |||
| 14.7. href XML Element | 14.7. href XML Element | |||
| Name: href | Name: href | |||
| Purpose: MUST contain a URI or a relative reference. | Purpose: MUST contain a URI or a relative reference. | |||
| Description: There may be limits on the value of 'href' depending | Description: There may be limits on the value of 'href' depending | |||
| on the context of its use. Refer to the specification text where | on the context of its use. Refer to the specification text where | |||
| 'href' is used to see what limitations apply in each case. | 'href' is used to see what limitations apply in each case. | |||
| Value: Simple-ref | Value: Simple-ref (see Section 8.3) | |||
| <!ELEMENT href (#PCDATA)> | <!ELEMENT href (#PCDATA)> | |||
| 14.8. include XML Element | 14.8. include XML Element | |||
| Name: include | Name: include | |||
| Purpose: Any child element represents the name of a property to be | Purpose: Any child element represents the name of a property to be | |||
| included in the PROPFIND response. All elements inside an | included in the PROPFIND response. All elements inside an | |||
| 'include' XML element MUST define properties related to the | 'include' XML element MUST define properties related to the | |||
| skipping to change at page 93, line 23 ¶ | skipping to change at page 94, line 23 ¶ | |||
| nature of the response. If this value is available an application | nature of the response. If this value is available an application | |||
| may use it instead of presenting the individual response | may use it instead of presenting the individual response | |||
| descriptions contained within the responses. | descriptions contained within the responses. | |||
| <!ELEMENT multistatus (response*, responsedescription?) > | <!ELEMENT multistatus (response*, responsedescription?) > | |||
| 14.17. owner XML Element | 14.17. owner XML Element | |||
| Name: owner | Name: owner | |||
| Purpose: Provides information about the creator of a lock. | Purpose: Holds client-supplied information about the principal on | |||
| whose behalf the lock was created. | ||||
| Description: Allows a client to provide information sufficient for | Description: Allows a client to provide information sufficient for | |||
| either directly contacting a principal (such as a telephone number | either directly contacting a principal (such as a telephone number | |||
| or Email URI), or for discovering the principal (such as the URL | or Email URI), or for discovering the principal (such as the URL | |||
| of a homepage) who created a lock. The value provided MUST be | of a homepage) who created a lock. The value provided MUST be | |||
| treated as a dead property in terms of XML Information Item | treated as a dead property in terms of XML Information Item | |||
| preservation. The server MUST NOT alter the value unless the | preservation. The server MUST NOT alter the value unless the | |||
| owner value provided by the client is empty. For a certain amount | owner value provided by the client is empty. For a certain amount | |||
| of interoperability between different client implementations, if | of interoperability between different client implementations, if | |||
| clients have URI-formatted contact information for the lock | clients have URI-formatted contact information for the lock | |||
| skipping to change at page 96, line 4 ¶ | skipping to change at page 97, line 4 ¶ | |||
| element. This requirement is necessary in order to keep | element. This requirement is necessary in order to keep | |||
| processing costs for a response to linear time. Essentially, this | processing costs for a response to linear time. Essentially, this | |||
| prevents having to search in order to group together all the | prevents having to search in order to group together all the | |||
| responses by 'href'. There are, however, no requirements | responses by 'href'. There are, however, no requirements | |||
| regarding ordering based on 'href' values. The optional | regarding ordering based on 'href' values. The optional | |||
| precondition/postcondition element and 'responsedescription' text | precondition/postcondition element and 'responsedescription' text | |||
| can provide additional information about this resource relative to | can provide additional information about this resource relative to | |||
| the request or result. | the request or result. | |||
| <!ELEMENT response (href, ((href*, status)|(propstat+)), | <!ELEMENT response (href, ((href*, status)|(propstat+)), | |||
| error?, responsedescription? , location?) > | error?, responsedescription?, location?) > | |||
| Note: the usage of the 'error' element inside 'response' is an | ||||
| incompatible change to [RFC3253], Section 1.6, paragraph 2 (where | ||||
| 'error' appeared as a child element of 'responsedescription'). | ||||
| 14.25. responsedescription XML Element | 14.25. responsedescription XML Element | |||
| Name: responsedescription | Name: responsedescription | |||
| Purpose: Contains information about a status response within a | Purpose: Contains information about a status response within a | |||
| Multi-Status. | Multi-Status. | |||
| Description: Provides information suitable to be presented to a | Description: Provides information suitable to be presented to a | |||
| user. | user. | |||
| skipping to change at page 98, line 26 ¶ | skipping to change at page 99, line 26 ¶ | |||
| request. There may be other requests which would result in a change | request. There may be other requests which would result in a change | |||
| to a protected property (as when a LOCK request affects the value of | to a protected property (as when a LOCK request affects the value of | |||
| DAV:lockdiscovery). Note that a given property could be protected on | DAV:lockdiscovery). Note that a given property could be protected on | |||
| one type of resource, but not protected on another type of resource. | one type of resource, but not protected on another type of resource. | |||
| A computed property is one with a value defined in terms of a | A computed property is one with a value defined in terms of a | |||
| computation (based on the content and other properties of that | computation (based on the content and other properties of that | |||
| resource, or even of some other resource). A computed property is | resource, or even of some other resource). A computed property is | |||
| always a protected property. | always a protected property. | |||
| COPY and MOVE behavior refers to local COPY and MOVE operations. | ||||
| For properties defined based on HTTP GET response headers (DAV:get*), | For properties defined based on HTTP GET response headers (DAV:get*), | |||
| the header value could include LWS as defined in [RFC2616], Section | the header value could include LWS as defined in [RFC2616], Section | |||
| 4.2. Server implementors SHOULD strip LWS from these values before | 4.2. Server implementors MUST strip LWS from these values before | |||
| using as WebDAV property values. | using as WebDAV property values. | |||
| Note that all property elements can be extended according to the | ||||
| rules defined in Section 17. | ||||
| 15.1. creationdate Property | 15.1. creationdate Property | |||
| Name: creationdate | Name: creationdate | |||
| 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], 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 DAV:creationdate | Protected: MAY be protected. Some servers allow DAV:creationdate | |||
| skipping to change at page 99, line 33 ¶ | skipping to change at page 100, line 33 ¶ | |||
| [RFC2518] might have made this a protected property as this is a | [RFC2518] might have made this a protected property as this is a | |||
| new requirement. | new requirement. | |||
| COPY/MOVE behaviour: This property value SHOULD be preserved in | COPY/MOVE behaviour: This property value SHOULD be preserved in | |||
| COPY and MOVE operations. | COPY and MOVE operations. | |||
| Description: Contains a description of the resource that is | Description: Contains a description of the resource that is | |||
| suitable for presentation to a user. This property is defined on | suitable for presentation to a user. This property is defined on | |||
| the resource, and hence SHOULD have the same value independent of | the resource, and hence SHOULD have the same value independent of | |||
| the Request-URI used to retrieve it (thus computing this property | the Request-URI used to retrieve it (thus computing this property | |||
| based on the Request-URI is deprecated). While generic clients | based on the Request-URI is deprecated). | |||
| might display the property value to end users, client UI designers | ||||
| must understand that the method for identifying resources is still | While generic clients might display the property value to end | |||
| the URL. Changes to DAV:displayname do not issue moves or copies | users, client UI designers must understand that the method for | |||
| to the server, but simply change a piece of meta-data on the | identifying resources is still the URL. Changes to DAV: | |||
| individual resource. Two resources can have the same DAV: | displayname do not issue moves or copies to the server, but simply | |||
| displayname value even within the same collection. | change a piece of meta-data on the individual resource. Two | |||
| resources can have the same DAV:displayname value even within the | ||||
| same collection. | ||||
| <!ELEMENT displayname (#PCDATA) > | <!ELEMENT displayname (#PCDATA) > | |||
| 15.3. getcontentlanguage Property | 15.3. getcontentlanguage Property | |||
| Name: getcontentlanguage | Name: getcontentlanguage | |||
| Purpose: Contains the Content-Language header value (from Section | Purpose: Contains the Content-Language header value (from Section | |||
| 14.12 of [RFC2616]) as it would be returned by a GET without | 14.12 of [RFC2616]) as it would be returned by a GET without | |||
| accept headers. | accept headers. | |||
| skipping to change at page 100, line 32 ¶ | skipping to change at page 101, line 32 ¶ | |||
| Name: getcontentlength | Name: getcontentlength | |||
| 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: See Section 14.13 of [RFC2616]. | Value: See Section 14.13 of [RFC2616]. | |||
| Protected: This property is computed, therefore protected. | Protected: This property is computed, therefore protected. | |||
| Description: The DAV:getcontentlength property MUST be defined on | Description: The DAV:getcontentlength property SHOULD be defined on | |||
| any DAV compliant resource that returns the Content-Length header | any DAV compliant resource that returns the Content-Length header | |||
| in response to a GET. | in response to a GET. | |||
| COPY/MOVE behaviour: This property value is dependent on the size | COPY/MOVE behaviour: This property value is dependent on the size | |||
| of the destination resource, not the value of the property on the | of the destination resource, not the value of the property on the | |||
| source resource. | source resource. | |||
| <!ELEMENT getcontentlength (#PCDATA) > | <!ELEMENT getcontentlength (#PCDATA) > | |||
| 15.5. getcontenttype Property | 15.5. getcontenttype Property | |||
| skipping to change at page 102, line 13 ¶ | skipping to change at page 103, line 13 ¶ | |||
| without accept headers. | without accept headers. | |||
| Value: rfc1123-date (defined in Section 3.3.1 of [RFC2616]) | 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 since [RFC2616] | |||
| implementations use the file system date modified value for the | requires clients to use ETags where provided, a server | |||
| DAV:getlastmodified value, and this can be preserved in a MOVE | implementing ETags can count on clients using a much better | |||
| even when the HTTP Last-Modified value SHOULD change. Note that | ||||
| since [RFC2616] requires clients to use ETags where provided, a | ||||
| server implementing ETags can count on clients using a much better | ||||
| mechanism than modification dates for offline synchronization or | mechanism than modification dates for offline synchronization or | |||
| cache control. Also note the considerations in Section 8.8. | cache control. Also note the considerations in Section 8.8. | |||
| 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 | |||
| DAV: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. [[anchor94: Language: starts with a note (IMHO unneeded), but | |||
| then makes a normative statement.]] | ||||
| <!ELEMENT getlastmodified (#PCDATA) > | <!ELEMENT getlastmodified (#PCDATA) > | |||
| 15.8. lockdiscovery Property | 15.8. lockdiscovery Property | |||
| Name: lockdiscovery | 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: Returns a listing of who has a lock, what type of lock | Description: Returns a listing of who has a lock, what type of lock | |||
| he has, the timeout type and the time remaining on the timeout, | he has, the timeout type and the time remaining on the timeout, | |||
| and the associated lock token. Owner information MAY be omitted | and the associated lock token. The server is free to withhold any | |||
| if it is considered sensitive. If there are no locks, but the | or all of this information if the requesting principal does not | |||
| server supports locks, the property will be present but contain | have sufficient access rights to see the requested data. If there | |||
| zero 'activelock' elements. If there is one or more lock, an | are no locks, but the server supports locks, the property will be | |||
| 'activelock' element appears for each lock on the resource. This | present but contain zero 'activelock' elements. If there is one | |||
| property is NOT lockable with respect to write locks (Section 7). | or more lock, an 'activelock' element appears for each lock on the | |||
| resource. This property is NOT lockable with respect to write | ||||
| locks (Section 7). | ||||
| <!ELEMENT lockdiscovery (activelock)* > | <!ELEMENT lockdiscovery (activelock)* > | |||
| 15.8.1. Example - Retrieving DAV:lockdiscovery | 15.8.1. Example - Retrieving DAV:lockdiscovery | |||
| >>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: application/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: application/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 | <D:href | |||
| >urn:uuid:f81de2ad-7f3d-a1b2-4f3c-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. | |||
| 15.9. resourcetype Property | 15.9. resourcetype Property | |||
| Name: resourcetype | Name: resourcetype | |||
| 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. [[anchor96: Language confusing: why "generally"?]] | |||
| 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. | the same type of resource at the destination. [[anchor97: That's | |||
| true for the collection type, but I doubt it's true in general | ||||
| (where types often depend on specific locations in the server | ||||
| namespace).]] | ||||
| Description: MUST be defined on all DAV compliant resources. Each | Description: MUST be defined on all DAV compliant resources. Each | |||
| child element identifies a specific type the resource belongs to, | child element identifies a specific type the resource belongs to, | |||
| such as 'collection', which is the only resource type defined by | such as 'collection', which is the only resource type defined by | |||
| this specification (see Section 14.3). If the element contains | this specification (see Section 14.3). If the element contains | |||
| the 'collection' child element plus additional unrecognized | the 'collection' child element plus additional unrecognized | |||
| elements, it should generally be treated as a collection. If the | elements, it should generally be treated as a collection. If the | |||
| element contains no recognized child elements, it should be | element contains no recognized child elements, it should be | |||
| treated as a non-collection resource. The default value is empty. | treated as a non-collection resource. The default value is empty. | |||
| This element MUST NOT contain text or mixed content. Any custom | This element MUST NOT contain text or mixed content. Any custom | |||
| skipping to change at page 105, line 41 ¶ | skipping to change at page 106, line 44 ¶ | |||
| 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 | COPY/MOVE behaviour: This property value is dependent on the kind | |||
| of locks supported at the destination, not on the value of the | of 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. [[anchor99: That's generally true for any protected | |||
| property, right?]] | ||||
| Description: Returns a listing of the combinations of scope and | Description: Returns a listing of the combinations of scope and | |||
| access types which may be specified in a lock request on the | access types which may be specified in a lock request on the | |||
| resource. Note that the actual contents are themselves controlled | resource. Note that the actual contents are themselves controlled | |||
| by access controls so a server is not required to provide | by access controls so a server is not required to provide | |||
| information the client is not authorized to see. This property is | information the client is not authorized to see. This property is | |||
| NOT lockable with respect to write locks (Section 7). | NOT lockable with respect to write locks (Section 7). | |||
| <!ELEMENT supportedlock (lockentry)* > | <!ELEMENT supportedlock (lockentry)* > | |||
| skipping to change at page 107, line 34 ¶ | skipping to change at page 108, line 34 ¶ | |||
| of a top-level 'error' element in the response body, unless otherwise | of a top-level 'error' element in the response body, unless otherwise | |||
| negotiated by the request, along with an appropriate response status. | negotiated by the request, along with an appropriate response status. | |||
| The most common response status codes are 403 (Forbidden) if the | The most common response status codes are 403 (Forbidden) if the | |||
| request should not be repeated because it will always fail, and 409 | request should not be repeated because it will always fail, and 409 | |||
| (Conflict) if it is expected that the user might be able to resolve | (Conflict) if it is expected that the user might be able to resolve | |||
| the conflict and resubmit the request. The 'error' element MAY | the conflict and resubmit the request. The 'error' element MAY | |||
| contain child elements with specific error information and MAY be | contain child elements with specific error information and MAY be | |||
| extended with any custom child elements. | extended with any custom child elements. | |||
| This mechanism does not take the place of using a correct numeric | This mechanism does not take the place of using a correct numeric | |||
| status code as defined here or in HTTP, because the client MUST | status code as defined here or in HTTP, because the client must | |||
| always be able to take a reasonable course of action based only on | always be able to take a reasonable course of action based only on | |||
| the numeric code. However, it does remove the need to define new | the numeric code. However, it does remove the need to define new | |||
| numeric codes. The new machine-readable codes used for this purpose | numeric codes. The new machine-readable codes used for this purpose | |||
| are XML elements classified as preconditions and postconditions, so | are XML elements classified as preconditions and postconditions, so | |||
| naturally any group defining a new condition code can use their own | naturally any group defining a new condition code can use their own | |||
| namespace. As always, the "DAV:" namespace is reserved for use by | namespace. As always, the "DAV:" namespace is reserved for use by | |||
| IETF-chartered WebDAV working groups. | IETF-chartered WebDAV working groups. | |||
| A server supporting this specification SHOULD use the XML error | A server supporting this specification SHOULD use the XML error | |||
| whenever a precondition or postcondition defined in this document is | whenever a precondition or postcondition defined in this document is | |||
| skipping to change at page 108, line 29 ¶ | skipping to change at page 109, line 29 ¶ | |||
| collection member "/workspace/webdav/proposal.doc". | collection member "/workspace/webdav/proposal.doc". | |||
| Some other useful preconditions and postconditions have been defined | Some other useful preconditions and postconditions have been defined | |||
| in other specifications extending WebDAV, such as [RFC3744] (see | in other specifications extending WebDAV, such as [RFC3744] (see | |||
| particularly Section 7.1.1), [RFC3253], and [RFC3648]. | particularly Section 7.1.1), [RFC3253], and [RFC3648]. | |||
| All these elements are in the "DAV:" namespace. If not specified | All these elements are in the "DAV:" namespace. If not specified | |||
| otherwise, the content for each condition's XML element is defined to | otherwise, the content for each condition's XML element is defined to | |||
| be empty. | be empty. | |||
| Name: lock-token-matches-request-uri | 16.1. DAV:lock-token-matches-request-uri (Precondition) | |||
| Use with: 409 Conflict | A request may include a Lock-Token header to identify a lock for the | |||
| purpose of UNLOCK. However, if the Request-URI does not fall within | ||||
| the scope of the lock identified by the token, the server SHOULD use | ||||
| this condition code. | ||||
| Purpose: (precondition) -- A request may include a Lock-Token header | 16.2. DAV:lock-token-submitted (Precondition) | |||
| to identify a lock for the UNLOCK method. However, if the | ||||
| Request-URI does not fall 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 include the Request-URI, or the lock could | ||||
| have disappeared, or the token may be invalid. | ||||
| Name: lock-token-submitted (precondition) | If a request would | |||
| Use with: 423 Locked | o modify the content for a locked resource, a dead property of a | |||
| locked resource, a live property that is defined to be lockable | ||||
| for a locked resource, | ||||
| Purpose: The request could not succeed because a lock token should | o an internal member URI of a locked collection, or | |||
| have been submitted. This element, if present, MUST contain at | ||||
| least one URL of a locked resource that prevented the request. In | ||||
| cases of MOVE, COPY and DELETE where collection locks are | ||||
| involved, it can be difficult for the client to find out which | ||||
| locked resource made the request fail -- but the server is only | ||||
| resonsible for returning one such locked resource. The server MAY | ||||
| return every locked resource that prevented the request from | ||||
| succeeding if it knows them all. | ||||
| <!ELEMENT lock-token-submitted (href+) > | o refresh a lock that locks that resource, | |||
| Name: no-conflicting-lock (precondition) | the request MUST fail unless the lock-token for that lock is | |||
| submitted in the request. An internal member URI of a collection is | ||||
| considered to be modified if it is added, removed, or identifies a | ||||
| different resource. | ||||
| Use with: Typically 423 Locked | <!ELEMENT lock-token-submitted (href)* > | |||
| Purpose: A LOCK request failed due the presence of an already | Servers SHOULD insert DAV:href elements for the URLs of each root of | |||
| existing conflicting lock. Note that a lock can be in conflict | a lock for which a lock token was needed, unless that URL identifies | |||
| although the resource to which the request was directed is only | the same resource to that the request was sent. | |||
| indirectly locked. In this case, the precondition code can be | ||||
| used to inform the client about the resource which is the root of | ||||
| the conflicting lock, avoiding a separate lookup of the | ||||
| "lockdiscovery" property. | ||||
| <!ELEMENT no-conflicting-lock (href)* > | 16.3. DAV:no-conflicting-lock (Precondition) | |||
| Name: no-external-entities | This precondition code can be used to signal that a lock request | |||
| failed due the presence of an already existing conflicting lock. | ||||
| Note that a lock can be in conflict although the resource to which | ||||
| the request was directed is only indirectly locked. In this case, | ||||
| the precondition code can be used to inform the client about the | ||||
| resource which is the root of the conflicting lock, avoiding a | ||||
| separate lookup of the "lockdiscovery" property. [[anchor101: Make | ||||
| sure the document actually defines "indirectly locked".]] | ||||
| Use with: 403 Forbidden | <!ELEMENT no-conflicting-lock (href)* > | |||
| Purpose: (precondition) -- If the server rejects a client request | Servers SHOULD insert a DAV:href element for the URL of the root of | |||
| because the request body contains an external entity, the server | the conflicting lock. | |||
| SHOULD use this error. | ||||
| Name: preserved-live-properties | 16.4. DAV:no-external-entities (Precondition) | |||
| Use with: 409 Conflict | If the request body is XML, and the server does not support external | |||
| entities, this condition code can be used to signal the problem (see | ||||
| also Section 20.6). | ||||
| Purpose: (postcondition) -- The server received an otherwise-valid | 16.5. DAV:preserved-live-properties (postcondition) | |||
| MOVE or COPY request, but cannot maintain the live properties with | ||||
| the same behavior at the destination. It may be that the server | ||||
| only supports some live properties in some parts of the | ||||
| repository, or simply has an internal error. | ||||
| Name: propfind-finite-depth | Servers may reject MOVE requests, if they cannot maintain live | |||
| properties with the same behaviour at the destination URL. In this | ||||
| case, this postcondition name may be used to signal the failure | ||||
| condition. [[q-copy-live-prop: Does this really apply to COPY as | ||||
| well???]] | ||||
| Use with: 403 Forbidden | 16.6. DAV:propfind-finite-depth (Precondition) | |||
| Purpose: (precondition) -- This server does not allow infinite-depth | Used to signal that a request was rejected because the server did not | |||
| PROPFIND requests on collections. | allow a value of "infinity" for the "Depth" request header. | |||
| Name: cannot-modify-protected-property | 16.7. DAV:cannot-modify-protected-property (Precondition) | |||
| Use with: 403 Forbidden | ||||
| Purpose: (precondition) -- The client attempted to set a protected | An attempt to modify a property that is defined by this document, as | |||
| property in a PROPPATCH (such as DAV:getetag). See also | being protected for that kind of resource, MUST fail (see [RFC3253], | |||
| [RFC3253], Section 3.12. | Section 3.12). | |||
| 17. XML Extensibility in DAV | 17. XML Extensibility in DAV | |||
| The XML namespace extension ([REC-XML-NAMES]) is used in this | The XML namespace extension ([REC-XML-NAMES]) is used in this | |||
| specification in order to allow for new XML elements to be added | specification in order to allow for new XML elements to be added | |||
| without fear of colliding with other element names. Although WebDAV | without fear of colliding with other element names. Although WebDAV | |||
| request and response bodies can be extended by arbitrary XML | request and response bodies can be extended by arbitrary XML | |||
| elements, which can be ignored by the message recipient, an 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 | element in the "DAV:" namespace SHOULD NOT be used in the request or | |||
| response body unless that XML element is explicitly defined in an | response body unless that XML element is explicitly defined in an | |||
| skipping to change at page 111, line 47 ¶ | skipping to change at page 111, line 47 ¶ | |||
| Processing instructions in XML SHOULD be ignored by recipients. | Processing instructions in XML SHOULD be ignored by recipients. | |||
| Thus, specifications extending WebDAV SHOULD NOT use processing | Thus, specifications extending WebDAV SHOULD NOT use processing | |||
| instructions to define normative behavior. | instructions to define normative behavior. | |||
| XML DTD fragments are included for all the XML elements defined in | XML DTD fragments are included for all the XML elements defined in | |||
| this specification. However, correct XML will not be valid according | this specification. However, correct XML will not be valid according | |||
| to any DTD due to namespace usage and extension rules. In | to any DTD due to namespace usage and extension rules. In | |||
| particular: | particular: | |||
| o Elements (from this specification) are in the "DAV:" namespace, | o Element names use the "DAV:" namespace, | |||
| o Element ordering is irrelevant unless otherwise stated, | o Element ordering is irrelevant unless otherwise stated, | |||
| o Extension attributes MAY be added, | o Extension attributes (attributes not already defined by this | |||
| o For element type definitions of "ANY", the normative text | specification) may be added, and MUST be ignored by recipients | |||
| definition for that element defines what can be in it and what | unless recognized), | |||
| that means. | ||||
| o For element type definitions of "#PCDATA", extension elements MUST | ||||
| NOT be added. | ||||
| o For other element type definitions, including "EMPTY", extension | ||||
| elements MAY be added. | ||||
| Note that this means that elements containing elements cannot be | o Extension elements (elements not already defined by this | |||
| extended to contain text, and vice versa. | specification) may be added for element type definitions other | |||
| than "ANY" or "#PCDATA", and MUST be ignored by recipients unless | ||||
| recognized). | ||||
| With DTD validation relaxed by the rules above, the constraints | With DTD validation relaxed by the rules above, the constraints | |||
| described by the DTD fragments are normative (see for example | described by the DTD fragments are normative (see for example | |||
| Appendix A). A recipient of a WebDAV message with an XML body MUST | Appendix A). A recipient of a WebDAV message with an XML body MUST | |||
| NOT validate the XML document according to any hard-coded or | NOT validate the XML document according to any hard-coded or | |||
| dynamically-declared DTD. | dynamically-declared DTD. | |||
| Note that this section describes backwards-compatible extensibility | Note that this section describes backwards-compatible extensibility | |||
| rules. There might also be times when an extension is designed not | rules. There might also be times when an extension is designed not | |||
| to be backwards-compatible, for example defining an extension that | to be backwards-compatible, for example defining an extension that | |||
| skipping to change at page 115, line 14 ¶ | skipping to change at page 115, line 14 ¶ | |||
| 19. Internationalization Considerations | 19. 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]. In this specification, | with the IETF Character Set Policy [RFC2277]. In this specification, | |||
| human-readable fields can be found either in the value of a property, | human-readable fields can be found either in the value of a property, | |||
| or in an error message returned in a response entity body. In both | or in an error message returned in a response entity body. In both | |||
| cases, the human-readable content is encoded using XML, which has | cases, the human-readable content is encoded using XML, which has | |||
| explicit provisions for character set tagging and encoding, and | explicit provisions for character set tagging and encoding, and | |||
| requires that XML processors read XML elements encoded, at minimum, | requires that XML processors read XML elements encoded, at minimum, | |||
| using the UTF-8 [RFC3629] and UTF-16 encodings of the ISO 10646 | using the UTF-8 ([RFC3629]) and UTF-16 ([RFC2781]) encodings of the | |||
| multilingual plane. XML examples in this specification demonstrate | ISO 10646 multilingual plane. XML examples in this specification | |||
| use of the charset parameter of the Content-Type header, as defined | demonstrate use of the charset parameter of the Content-Type header, | |||
| in [RFC3023], as well as the XML declarations which provide charset | as defined in [RFC3023], as well as the XML declarations which | |||
| identification information for MIME and XML processors. | provide charset identification information for MIME and XML | |||
| 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 [REC-XML] for definitions of values and | content and attributes. See [REC-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 | |||
| skipping to change at page 119, line 28 ¶ | skipping to change at page 119, line 28 ¶ | |||
| state that an XML processor may, at its discretion, include the | state that an XML processor may, at its discretion, include the | |||
| external XML entity. | external XML entity. | |||
| External XML entities have no inherent trustworthiness and are | External XML entities have no inherent trustworthiness and are | |||
| subject to all the attacks that are endemic to any HTTP GET request. | subject to all the attacks that are endemic to any HTTP GET request. | |||
| Furthermore, it is possible for an external XML entity to modify the | Furthermore, it is possible for an external XML entity to modify the | |||
| DTD, and hence affect the final form of an XML document, in the worst | DTD, and hence affect the final form of an XML document, in the worst | |||
| case significantly modifying its semantics, or exposing the XML | case significantly modifying its semantics, or exposing the XML | |||
| processor to the security risks discussed in [RFC3023]. Therefore, | processor to the security risks discussed in [RFC3023]. Therefore, | |||
| implementers must be aware that external XML entities should be | implementers must be aware that external XML entities should be | |||
| treated as untrustworthy. If a server implementor chooses not to | treated as untrustworthy. If a server rejects a request due to the | |||
| handle external XML entities, it SHOULD respond to requests | presence of external entities, it SHOULD include the 'no-external- | |||
| containing external entities with the 'no-external-entities' | entities' condition code in the response body. | |||
| condition code. | ||||
| There is also the scalability risk that would accompany a widely | There is also the scalability risk that would accompany a widely | |||
| deployed application which made use of external XML entities. In | deployed application which made use of external XML entities. In | |||
| this situation, it is possible that there would be significant | this situation, it is possible that there would be significant | |||
| numbers of requests for one external XML entity, potentially | numbers of requests for one external XML entity, potentially | |||
| overloading any server which fields requests for the resource | overloading any server which fields requests for the resource | |||
| containing the external XML entity. | containing the external XML entity. | |||
| Furthermore, there's also a risk based on the evaluation of "internal | Furthermore, there's also a risk based on the evaluation of "internal | |||
| entities" as defined in Section 4.2.2 of [REC-XML]. A small, | entities" as defined in Section 4.2.2 of [REC-XML]. A small, | |||
| skipping to change at page 121, line 5 ¶ | skipping to change at page 120, line 46 ¶ | |||
| trust relationship with the author that is publishing the document. | trust relationship with the author that is publishing the document. | |||
| Servers that allow clients to publish arbitrary content can usefully | Servers that allow clients to publish arbitrary content can usefully | |||
| implement precautions to check that content published to the server | implement precautions to check that content published to the server | |||
| is not harmful to other clients. Servers could do this by techniques | is not harmful to other clients. Servers could do this by techniques | |||
| such as restricting the types of content that is allowed to be | such as restricting the types of content that is allowed to be | |||
| published and running virus and malware detection software on | published and running virus and malware detection software on | |||
| published content. Servers can also mitigate the risk by having | published content. Servers can also mitigate the risk by having | |||
| appropriate access restriction and authentication of users that are | appropriate access restriction and authentication of users that are | |||
| allowed to publish content to the server. | allowed to publish content to the server. | |||
| One specific attack scenario deserves special mention here: with the | ||||
| arrival of the "XMLHttpRequest" API (see [WD-XMLHttpRequest]), user | ||||
| agents have acquired the capability to submit arbitrary HTTP requests | ||||
| against the server the content was obtained from. With the well- | ||||
| known semantics of HTTP verbs such as PUT and DELETE, the following | ||||
| attack becomes possible: | ||||
| 1. Alice prepares an HTML page with embedded Javascript code that | ||||
| will submit a DELETE request against the URI | ||||
| http://www.example.com/users/bob/ (a resource she has not write | ||||
| access to, but Bob has). | ||||
| 2. Alice stores this HTML page at | ||||
| http://www.example.com/users/alice/readme.html, a resource she | ||||
| has write access to. | ||||
| 3. Alice emails Bob a link to | ||||
| http://www.example.com/users/alice/readme.html, for which he has | ||||
| read access once authenticated. | ||||
| 4. Bob follows the link, authenticates, and the embedded script code | ||||
| executes the DELETE request against | ||||
| http://www.example.com/users/bob/ while being authenticated as | ||||
| Bob. | ||||
| This attack relies on the common risk of collaboratively authoring | ||||
| resources on the same server, which requires a certain amount of | ||||
| trust between the users. However, even an action usually considered | ||||
| as "safe", such as opening an HTML page in a web browser, can cause | ||||
| arbitrary HTTP methods to be invoked. Note that WebDAV isn't the | ||||
| root cause for this vulnerability, it just makes it more visible. | ||||
| Potential steps to reduce the risks associated with this attack | ||||
| include: | ||||
| o Separating server domains for authoring (read/write) and publicly | ||||
| serving content. | ||||
| o Disallowing certain content (such as scripts in HTML pages) | ||||
| altogether, as discussed above. | ||||
| o Using user agents that follow Section 9.1.1 of [RFC2616], in that | ||||
| they do not allow unsafe methods to be executed without making the | ||||
| user aware of the consequences - unfortunately, none of today's | ||||
| browsers is doing that. | ||||
| 21. IANA Considerations | 21. IANA Considerations | |||
| 21.1. New URI Schemes | 21.1. New URI Schemes | |||
| This specification defines two URI schemes: | This specification defines two URI schemes (see [RFC3986] and | |||
| [RFC4395]): | ||||
| 1. the "opaquelocktoken" scheme defined in Appendix C, and | 1. the "opaquelocktoken" scheme defined in Appendix C, and | |||
| 2. the "DAV" URI scheme, which historically was used in [RFC2518] to | 2. the "DAV" URI scheme, which historically was used in [RFC2518] to | |||
| disambiguate WebDAV property and XML element names and which | disambiguate WebDAV property and XML element names and which | |||
| continues to be used for that purpose in this specification and | continues to be used for that purpose in this specification and | |||
| others extending WebDAV. Creation of identifiers in the "DAV:" | others extending WebDAV. Creation of identifiers in the "DAV:" | |||
| namespace is controlled by the IETF. | namespace is controlled by the IETF. | |||
| Note that defining new URI schemes for XML namespaces is now | Note that defining new URI schemes for XML namespaces is now | |||
| skipping to change at page 121, line 32 ¶ | skipping to change at page 122, line 33 ¶ | |||
| 21.2. XML Namespaces | 21.2. XML Namespaces | |||
| XML namespaces disambiguate WebDAV property names and XML elements. | XML namespaces disambiguate WebDAV property names and XML elements. | |||
| Any WebDAV user or application can define a new namespace in order to | Any WebDAV user or application can define a new namespace in order to | |||
| create custom properties or extend WebDAV XML syntax. IANA does not | create custom properties or extend WebDAV XML syntax. IANA does not | |||
| need to manage such namespaces, property names or element names. | need to manage such namespaces, property names or element names. | |||
| 21.3. Message Header Fields | 21.3. Message Header Fields | |||
| The message header fields below should be added to the permanent | The message header fields below should be updated in the permanent | |||
| registry (see [RFC3864]). | registry (see [RFC3864] for the registration process, and [RFC4229] | |||
| for the initial registration being updated by this specification). | ||||
| Note: the "Status-URI" header defined in Section 9.7 of [RFC2518] | ||||
| has been removed in this specification; its IANA registration | ||||
| should continue to reference RFC2518. | ||||
| 21.3.1. DAV | 21.3.1. DAV | |||
| Header field name: DAV | Header field name: DAV | |||
| Applicable protocol: http | Applicable protocol: http | |||
| Status: standard | Status: standard | |||
| Author/Change controller: IETF | Author/Change controller: IETF | |||
| skipping to change at page 123, line 4 ¶ | skipping to change at page 124, line 10 ¶ | |||
| Author/Change controller: IETF | Author/Change controller: IETF | |||
| Specification document: this specification (Section 10.5) | Specification document: this specification (Section 10.5) | |||
| 21.3.6. Overwrite | 21.3.6. Overwrite | |||
| Header field name: Overwrite | Header field name: Overwrite | |||
| Applicable protocol: http | Applicable protocol: http | |||
| Status: standard | Status: standard | |||
| Author/Change controller: IETF | Author/Change controller: IETF | |||
| Specification document: this specification (Section 10.6) | Specification document: this specification (Section 10.6) | |||
| 21.3.7. Timeout | 21.3.7. Timeout | |||
| Header field name: Timeout | Header field name: Timeout | |||
| Applicable protocol: http | Applicable protocol: http | |||
| Status: standard | Status: standard | |||
| Author/Change controller: IETF | Author/Change controller: IETF | |||
| Specification document: this specification (Section 10.7) | Specification document: this specification (Section 10.7) | |||
| 21.4. HTTP Status Codes | ||||
| This specification defines the HTTP status codes | ||||
| o 207 Multi-Status (Section 11.1), | ||||
| o 422 Unprocessable Entity (Section 11.2), | ||||
| o 423 Locked (Section 11.3), | ||||
| o 424 Failed Dependency (Section 11.4) and | ||||
| o 507 Insufficient Storage (Section 11.5), | ||||
| to be updated in the registry at | ||||
| <http://www.iana.org/assignments/http-status-codes>. | ||||
| Note: the HTTP status code 102 (Processing) (defined in Section | ||||
| 10.1 of [RFC2518]) has been removed in this specification; its | ||||
| IANA registration should continue to reference RFC2518. | ||||
| 22. Acknowledgements | 22. Acknowledgements | |||
| A specification such as this thrives on piercing critical review and | [[anchor117: I think three sections of thanks is way too much, this | |||
| withers from apathetic neglect. The authors gratefully acknowledge | probably should be collapsed into a single one.]] A specification | |||
| the contributions of the following people, whose insights were so | such as this thrives on piercing critical review and withers from | |||
| apathetic neglect. The authors gratefully acknowledge the | ||||
| contributions of the following people, whose insights were so | ||||
| valuable at every stage of our work. | valuable at every stage of our work. | |||
| Contributors to RFC2518 | Contributors to RFC2518 | |||
| Terry Allen, Harald Alvestrand, Jim Amsden, Becky Anderson, Alan | Terry Allen, Harald Alvestrand, Jim Amsden, Becky Anderson, Alan | |||
| Babich, Sanford Barr, Dylan Barrell, Bernard Chester, Tim Berners- | Babich, Sanford Barr, Dylan Barrell, Bernard Chester, Tim Berners- | |||
| Lee, Dan Connolly, Jim Cunningham, Ron Daniel, Jr., Jim Davis, Keith | Lee, Dan Connolly, Jim Cunningham, Ron Daniel, Jr., Jim Davis, Keith | |||
| Dawson, Mark Day, Brian Deen, Martin Duerst, David Durand, Lee | Dawson, Mark Day, Brian Deen, Martin Duerst, David Durand, Lee | |||
| Farrell, Chuck Fay, Wesley Felter, Roy Fielding, Mark Fisher, Alan | Farrell, Chuck Fay, Wesley Felter, Roy Fielding, Mark Fisher, Alan | |||
| Freier, George Florentine, Jim Gettys, Phill Hallam-Baker, Dennis | Freier, George Florentine, Jim Gettys, Phill Hallam-Baker, Dennis | |||
| skipping to change at page 128, line 10 ¶ | skipping to change at page 129, line 10 ¶ | |||
| 1555 N. Technology Way, | 1555 N. Technology Way, | |||
| M/S ORM F111, | M/S ORM F111, | |||
| Orem, UT 84097-2399. | Orem, UT 84097-2399. | |||
| Email: dcjensen@novell.com. | Email: dcjensen@novell.com. | |||
| 25. References | 25. References | |||
| 25.1. Normative References | 25.1. Normative References | |||
| [REC-XML] Bray, T., Paoli, J., Sperberg-McQueen, C., Maler, E., and | [REC-XML] Bray, T., Paoli, J., Sperberg-McQueen, C., Maler, E., and | |||
| F. Yergeau, "Extensible Markup Language (XML) 1.0 (Third | F. Yergeau, "Extensible Markup Language (XML) 1.0 (Fourth | |||
| Edition)", W3C REC-xml-20040204, February 2004, | Edition)", W3C REC-xml-20060816, August 2006, | |||
| <http://www.w3.org/TR/2004/REC-xml-20040204>. | <http://www.w3.org/TR/2006/REC-xml-20060816>. | |||
| [REC-XML-INFOSET] | [REC-XML-INFOSET] | |||
| Cowan, J. and R. Tobin, "XML Information Set (Second | Cowan, J. and R. Tobin, "XML Information Set (Second | |||
| Edition)", W3C REC-xml-infoset-20040204, February 2004, | Edition)", W3C REC-xml-infoset-20040204, February 2004, | |||
| <http://www.w3.org/TR/2004/REC-xml-infoset-20040204/>. | <http://www.w3.org/TR/2004/REC-xml-infoset-20040204/>. | |||
| [REC-XML-NAMES] | [REC-XML-NAMES] | |||
| Bray, T., Hollander, D., and A. Layman, "Namespaces in | Bray, T., Hollander, D., Layman, A., and R. Tobin, | |||
| XML", W3C REC-xml-names-19990114, January 1999, | "Namespaces in XML 1.0 (Second Edition)", W3C REC-xml- | |||
| <http://www.w3.org/TR/1999/REC-xml-names-19990114>. | names-20060816, August 2006, | |||
| <http://www.w3.org/TR/2006/REC-xml-names-20060816>. | ||||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
| [RFC2277] Alvestrand, H., "IETF Policy on Character Sets and | [RFC2277] Alvestrand, H., "IETF Policy on Character Sets and | |||
| Languages", BCP 18, RFC 2277, January 1998. | Languages", BCP 18, RFC 2277, January 1998. | |||
| [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | |||
| Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext | Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext | |||
| Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | |||
| [RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., | [RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., | |||
| Leach, P., Luotonen, A., and L. Stewart, "HTTP | Leach, P., Luotonen, A., and L. Stewart, "HTTP | |||
| Authentication: Basic and Digest Access Authentication", | Authentication: Basic and Digest Access Authentication", | |||
| RFC 2617, June 1999. | RFC 2617, June 1999. | |||
| [RFC3339] Klyne, G., Ed. and C. Newman, "Date and Time on the | [RFC3339] Klyne, G., Ed. and C. Newman, "Date and Time on the | |||
| Internet: Timestamps", RFC 3339, July 2002. | Internet: Timestamps", RFC 3339, July 2002. | |||
| [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO | ||||
| 10646", STD 63, RFC 3629, November 2003. | ||||
| [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | |||
| Resource Identifier (URI): Generic Syntax", STD 66, | Resource Identifier (URI): Generic Syntax", STD 66, | |||
| RFC 3986, January 2005. | RFC 3986, January 2005. | |||
| [RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally | [RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally | |||
| Unique IDentifier (UUID) URN Namespace", RFC 4122, | Unique IDentifier (UUID) URN Namespace", RFC 4122, | |||
| July 2005. | July 2005. | |||
| 25.2. Informational References | 25.2. Informational References | |||
| [RFC2291] Slein, J., Vitali, F., Whitehead, E., and D. Durand, | [RFC2291] Slein, J., Vitali, F., Whitehead, E., and D. Durand, | |||
| "Requirements for a Distributed Authoring and Versioning | "Requirements for a Distributed Authoring and Versioning | |||
| Protocol for the World Wide Web", RFC 2291, February 1998. | Protocol for the World Wide Web", RFC 2291, February 1998. | |||
| [RFC2518] Goland, Y., Whitehead, E., Faizi, A., Carter, S., and D. | [RFC2518] Goland, Y., Whitehead, E., Faizi, A., Carter, S., and D. | |||
| Jensen, "HTTP Extensions for Distributed Authoring -- | Jensen, "HTTP Extensions for Distributed Authoring -- | |||
| WEBDAV", RFC 2518, February 1999. | WEBDAV", RFC 2518, February 1999. | |||
| [RFC2781] Hoffman, P. and F. Yergeau, "UTF-16, an encoding of ISO | ||||
| 10646", RFC 2781, February 2000. | ||||
| [RFC3023] Murata, M., St. Laurent, S., and D. Kohn, "XML Media | [RFC3023] Murata, M., St. Laurent, S., and D. Kohn, "XML Media | |||
| Types", RFC 3023, January 2001. | Types", RFC 3023, January 2001. | |||
| [RFC3253] Clemm, G., Amsden, J., Ellison, T., Kaler, C., and J. | [RFC3253] Clemm, G., Amsden, J., Ellison, T., Kaler, C., and J. | |||
| Whitehead, "Versioning Extensions to WebDAV | Whitehead, "Versioning Extensions to WebDAV | |||
| (Web Distributed Authoring and Versioning)", RFC 3253, | (Web Distributed Authoring and Versioning)", RFC 3253, | |||
| March 2002. | March 2002. | |||
| [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO | ||||
| 10646", RFC 3629, STD 63, November 2003. | ||||
| [RFC3648] Whitehead, J. and J. Reschke, Ed., "Web Distributed | [RFC3648] Whitehead, J. and J. Reschke, Ed., "Web Distributed | |||
| Authoring and Versioning (WebDAV) Ordered Collections | Authoring and Versioning (WebDAV) Ordered Collections | |||
| Protocol", RFC 3648, December 2003. | Protocol", RFC 3648, December 2003. | |||
| [RFC3744] Clemm, G., Reschke, J., Sedlar, E., and J. Whitehead, "Web | [RFC3744] Clemm, G., Reschke, J., Sedlar, E., and J. Whitehead, "Web | |||
| Distributed Authoring and Versioning (WebDAV) Access | Distributed Authoring and Versioning (WebDAV) Access | |||
| Control Protocol", RFC 3744, May 2004. | Control Protocol", RFC 3744, May 2004. | |||
| [RFC3864] Klyne, G., Nottingham, M., and J. Mogul, "Registration | [RFC3864] Klyne, G., Nottingham, M., and J. Mogul, "Registration | |||
| Procedures for Message Header Fields", BCP 90, RFC 3864, | Procedures for Message Header Fields", BCP 90, RFC 3864, | |||
| September 2004. | September 2004. | |||
| [RFC4229] Nottingham, M. and J. Mogul, "HTTP Header Field | ||||
| Registrations", RFC 4229, December 2005. | ||||
| [RFC4395] Hansen, T., Hardie, T., and L. Masinter, "Guidelines and | ||||
| Registration Procedures for New URI Schemes", BCP 115, | ||||
| RFC 4395, February 2006. | ||||
| [WD-XMLHttpRequest] | ||||
| van Kesteren, A., "The XMLHttpRequest Object", W3C WD- | ||||
| XMLHttpRequest-20070227, February 2007, | ||||
| <http://www.w3.org/TR/2007/WD-XMLHttpRequest-20070227/>. | ||||
| Work in progress. | ||||
| URIs | ||||
| [1] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=48> | ||||
| [2] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=143> | ||||
| [3] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=152> | ||||
| [4] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=161> | ||||
| [5] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=169> | ||||
| [6] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=177> | ||||
| [7] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=181> | ||||
| [8] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=202> | ||||
| [9] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=213> | ||||
| [10] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=217> | ||||
| [11] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=220> | ||||
| [12] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=227> | ||||
| [13] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=229> | ||||
| [14] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=235> | ||||
| [15] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=237> | ||||
| [16] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=238> | ||||
| [17] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=239> | ||||
| [18] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=240> | ||||
| [19] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=241> | ||||
| [20] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=242> | ||||
| [21] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=243> | ||||
| [22] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=244> | ||||
| [23] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=245> | ||||
| [24] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=247> | ||||
| [25] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=248> | ||||
| [26] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=250> | ||||
| [27] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=251> | ||||
| [28] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=252> | ||||
| [29] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=254> | ||||
| [30] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=255> | ||||
| [31] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=258> | ||||
| [32] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=259> | ||||
| [33] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=260> | ||||
| [34] <http://ietf.osafoundation.org:8080/bugzilla/ | ||||
| show_bug.cgi?id=264> | ||||
| Appendix A. Notes on Processing XML Elements | Appendix A. Notes on Processing XML Elements | |||
| A.1. Notes on Empty XML Elements | A.1. Notes on Empty XML Elements | |||
| XML supports two mechanisms for indicating that an XML element does | XML supports two mechanisms for indicating that an XML element does | |||
| not have any content. The first is to declare an XML element of the | not have any content. The first is to declare an XML element of the | |||
| form <A></A>. The second is to declare an XML element of the form | form <A></A>. The second is to declare an XML element of the form | |||
| <A/>. The two XML elements are semantically identical. | <A/>. The two XML elements are semantically identical. | |||
| A.2. Notes on Illegal XML Processing | A.2. Notes on Illegal XML Processing | |||
| skipping to change at page 134, line 5 ¶ | skipping to change at page 139, line 5 ¶ | |||
| extension will never be used twice with the associated UUID. | extension will never be used twice with the associated UUID. | |||
| OpaqueLockToken-URI = "opaquelocktoken:" UUID [Extension] | OpaqueLockToken-URI = "opaquelocktoken:" UUID [Extension] | |||
| ; UUID is defined in Section 3 of [RFC4122]. Note that LWS | ; UUID is defined in Section 3 of [RFC4122]. Note that LWS | |||
| ; is not allowed between elements of | ; is not allowed between elements of | |||
| ; this production. | ; this production. | |||
| Extension = path | Extension = path | |||
| ; path is defined in Section 3.3 of [RFC3986] | ; path is defined in Section 3.3 of [RFC3986] | |||
| Appendix D. Lock-null Resources | Appendix D. Lock-Null Resources | |||
| The original WebDAV model for locking unmapped URLs created "lock- | ||||
| null resources". This model was over-complicated and some | ||||
| interoperability and implementation problems were discovered. The | ||||
| new WebDAV model for locking unmapped URLs (see Section 7.3) creates | ||||
| "locked empty resources". Lock-null resources are deprecated. This | ||||
| section discusses the original model briefly because clients MUST be | ||||
| able to handle either model. | ||||
| In the original "lock-null resource" model, which is no longer | ||||
| recommended for implementation: | ||||
| o A lock-null resource sometimes appeared as "Not Found". The | ||||
| server responds with a 404 or 405 to any method except for PUT, | ||||
| MKCOL, OPTIONS, PROPFIND, LOCK, UNLOCK. | ||||
| o A lock-null resource does however show up as a member of its | This specification deprecates the "Lock-Null Resources" (LNRs) | |||
| parent collection. | defined in Section 7.4 of [RFC2518], and replaces them with empty | |||
| locked regular resources (see Section 7.3). However, it's still | ||||
| legal for servers to implement the deprecated model. | ||||
| o The server removes the lock-null resource entirely (its URI | A LNR differs from an empty locked resource in the following aspects: | |||
| becomes unmapped) if its lock goes away before it is converted to | ||||
| a regular resource. Recall that locks go away not only when they | ||||
| expire or are unlcoked, but are also removed if a resource is | ||||
| renamed or moved, or if any parent collection is renamed or moved. | ||||
| o The server converts the lock-null resource into a regular resource | o It MUST respond with a 404 (Not Found) or 405 (Method Not Allowed) | |||
| if a PUT request to the URL is successful. | to any methods except for PUT, MKCOL, OPTIONS, PROPFIND, LOCK, and | |||
| UNLOCK. | ||||
| o The server converts the lock-null resource into a collection if a | o Most of its live properties, such as all the get* properties, will | |||
| MKCOL request to the URL is successful (though interoperability | have no value as a lock-null resource does not support the GET | |||
| experience showed that not all servers followed this requirement). | method. It MUST have defined values for lockdiscovery and | |||
| supportedlock properties. | ||||
| o Property values were defined for DAV:lockdiscovery and DAV: | o Until a method such as PUT or MKCOL is successfully executed on | |||
| supportedlock properties but not necessarily for other properties | the lock-null resource the resource MUST stay in the lock-null | |||
| like DAV:getcontenttype. | state. However, once a PUT or MKCOL is successfully executed on a | |||
| lock-null resource the resource ceases to be in the lock-null | ||||
| state. (Note that an LNR thus can be used to create a collection, | ||||
| which is not possible with the simplified empty locked resource | ||||
| model anymore.) | ||||
| Clients can easily interoperate both with servers that support the | o If it is unlocked, for any reason, without a PUT, MKCOL, or | |||
| old model "lock-null resources" and the recommended model of "locked | similar method having been successfully executed upon it then the | |||
| empty resources" by only attempting PUT after a LOCK to an unmapped | resource MUST return to the null state. (Note that with an empty | |||
| URL, not MKCOL or GET. | locked resource, an empty regular resource would remain in place.) | |||
| D.1. Guidance for Clients Using LOCK to Create Resources | D.1. Guidance for Clients Using LOCK to Create Resources | |||
| A WebDAV client implemented to this specification might find servers | A WebDAV client implemented to this specification might find servers | |||
| that create lock-null resources (implemented before this | that create lock-null resources (implemented before this | |||
| specification using [RFC2518]) as well as servers that create locked | specification using [RFC2518]) as well as servers that create locked | |||
| empty resources. The response to the LOCK request will not indicate | empty resources. The response to the LOCK request will not indicate | |||
| what kind of resource was created. There are a few techniques which | what kind of resource was created. There are a few techniques which | |||
| help the client deal with either type. | help the client deal with either type. | |||
| skipping to change at page 139, line 6 ¶ | skipping to change at page 144, line 6 ¶ | |||
| o The Destination and If request headers now allow absolute paths in | o The Destination and If request headers now allow absolute paths in | |||
| addition to full URIs (see Section 8.3). This may be useful for | addition to full URIs (see Section 8.3). This may be useful for | |||
| clients operating through a reverse proxy that does rewrite the | clients operating through a reverse proxy that does rewrite the | |||
| Host request header, but not WebDAV-specific headers. | Host request header, but not WebDAV-specific headers. | |||
| o This specification adopts the error marshalling extensions and the | o This specification adopts the error marshalling extensions and the | |||
| "precondition/postcondition" terminology defined in [RFC3253] (see | "precondition/postcondition" terminology defined in [RFC3253] (see | |||
| Section 16). Related to that, it adds the "error" XML element | Section 16). Related to that, it adds the "error" XML element | |||
| inside multistatus response bodies (see Section 14.5, however note | inside multistatus response bodies (see Section 14.5, however note | |||
| that it uses a format different from the one recommend in | that it uses a format different from the one recommended in | |||
| RFC3253). | RFC3253). | |||
| o Senders and recipients are now required to support the UTF-16 | ||||
| character encoding in XML message bodies (see Section 19). | ||||
| o Clients are now required to send the Depth header on PROPFIND | ||||
| requests, although servers are still encouraged to support clients | ||||
| that don't. | ||||
| Locking | Locking | |||
| o RFC2518's concept of "lock-null resources" (LNRs) has been | o RFC2518's concept of "lock-null resources" (LNRs) has been | |||
| replaced by a simplified approach, the "locked empty resources" | replaced by a simplified approach, the "locked empty resources" | |||
| (see Section 7.3). There are some aspects of lock-null resources | (see Section 7.3). There are some aspects of lock-null resources | |||
| clients can not rely on anymore, namely the ability to use them to | clients can not rely on anymore, namely the ability to use them to | |||
| create a locked collection or the fact that they disappear upon | create a locked collection or the fact that they disappear upon | |||
| UNLOCK when no PUT or MKCOL request was issued. Note that servers | UNLOCK when no PUT or MKCOL request was issued. Note that servers | |||
| are still allowed to implement LNRs as per RFC2518. | are still allowed to implement LNRs as per RFC2518. | |||
| skipping to change at page 147, line 9 ¶ | skipping to change at page 151, line 9 ¶ | |||
| G.11. Changes in -16 | G.11. Changes in -16 | |||
| Fixed factual errors in Security Considerations authentication | Fixed factual errors in Security Considerations authentication | |||
| section. | section. | |||
| Fixed example of refreshing a lock -- didn't use "If" header as | Fixed example of refreshing a lock -- didn't use "If" header as | |||
| required in the text. | required in the text. | |||
| Fixed example of using so-called 'all-prop' with the 'include' | Fixed example of using so-called 'all-prop' with the 'include' | |||
| directivenotifi, so that it would actually be a useful example, by | directive, so that it would actually be a useful example, by | |||
| including live properties that wouldn't already be covered by 'all- | including live properties that wouldn't already be covered by 'all- | |||
| prop'. | prop'. | |||
| Clarified requirement in section 7.7 paragraph 2 -- a clear | Clarified requirement in section 7.7 paragraph 2 -- a clear | |||
| requirement for the server to meet, rather than passive voice "this | requirement for the server to meet, rather than passive voice "this | |||
| request MUST only be used". | request MUST only be used". | |||
| Made explicit requirement for successful response format for | Made explicit requirement for successful response format for | |||
| PROPPATCH (bug 238) | PROPPATCH (bug 238) | |||
| skipping to change at page 148, line 5 ¶ | skipping to change at page 152, line 5 ¶ | |||
| Removed suggestive/confusing text about lock notifications | Removed suggestive/confusing text about lock notifications | |||
| Add section with guidance for clients dealing with both lock-null | Add section with guidance for clients dealing with both lock-null | |||
| resources and locked empty resources. | resources and locked empty resources. | |||
| Allow servers to omit owner information in lockdiscovery property. | Allow servers to omit owner information in lockdiscovery property. | |||
| Clarify what 'allprop' means, mostly fixing misleading text in change | Clarify what 'allprop' means, mostly fixing misleading text in change | |||
| summary | summary | |||
| G.14. Changes compared to RFC2518bis, dated 2007-02-15 | ||||
| In Section 17, clarify extensibility, and what exactly the DTD | ||||
| fragments mean. In Section 14 and Section 15, refer to extensibility | ||||
| rules, remove "Extensibility" lines. Clarify content for | ||||
| Section 15.9. See issue 48 [1]. | ||||
| Fix inconsistencies after backout of lock refresh changes. See issue | ||||
| 143 [2]. | ||||
| Update PUT (Section 9.7.1) accordingly. Also fix language in | ||||
| Section 7.3 (should be a separate ticket). See issue 152 [3]. | ||||
| Minor fixes applied to changes made by L. D. See issue 161 [4]. | ||||
| Remove misleading statement about Date header in Section 8.5 (it | ||||
| tries to repeat normative language from Section 14.18 of [RFC2616], | ||||
| but fails; for instance, the Date header is not required for 1xx | ||||
| responses). See issue 169 [5]. | ||||
| Cleanup description of status codes inside multistatus in Section 13, | ||||
| and clarify individual Sections 9.1.2 and 9.2.1 as well. See issue | ||||
| 177 [6]. | ||||
| Fix incorrect terminology and typos, mainly in Section 16. Add | ||||
| forward references. See issue 181 [7]. | ||||
| Remove most of the unnecessary stuff from the definition of empty | ||||
| locked resources, and remove the part about LNRs completely, just | ||||
| adding a forward reference to a new appendix (Section 7.3). See | ||||
| issue 202 [8]. | ||||
| Fix intro in Section 9.1 plus text in Section 16. See issue 213 [9]. | ||||
| Various proposed fixes to Sections 6, 7 and 9. See issue 217 [10]. | ||||
| Remove "use with" statements from Section 16. See issue 220 [11]. | ||||
| Fix typos; add requirement to consistently use the same segment in | ||||
| PROPFIND responses, re-add subsection titles for examples. See issue | ||||
| 227 [12]. | ||||
| Re-organize some of the Timeout discussion in Section 6. Remove | ||||
| unneeded statement about what timetype values are allowed in | ||||
| responses (Section 10.7), and integrate those parts that are about | ||||
| Timeout semantics into Section 6. Update Changes section. See issue | ||||
| 229 [13]. | ||||
| Relaxed requirements for COPY (Section 9.8.2) and MOVE | ||||
| (Section 9.9.1) of dead properties to "SHOULD". See issue 235 [14]. | ||||
| Describe the problem and potential solutions in Section 20.8. See | ||||
| issue 237 [15]. | ||||
| Add definition of PROPPATCH response format in Section 9.2. See | ||||
| issue 238 [16]. | ||||
| Relax requirements for DAV:getcontentlength in Section 15.4. See | ||||
| issue 239 [17]. | ||||
| Update references for REC-XML and REC-XML-NAMES. See issue 240 [18]. | ||||
| Fix inconsistency between Section 9.7.1 and Section 15.5. See issue | ||||
| 241 [19]. | ||||
| Remove statement in Section 7.3. See issue 242 [20]. | ||||
| Remove unneeded subsection from Section 12. See issue 243 [21]. | ||||
| Fix description of DAV:owner in Section 14.17. See issue 244 [22]. | ||||
| Remove incomprehensible statement from Section 15.7. See issue | ||||
| 245 [23]. | ||||
| Get rid of confusing statement about COPY/MOVE behaviour in | ||||
| Section 15. See issue 247 [24]. | ||||
| Fix statement about LWS handling in Section 15. See issue 248 [25]. | ||||
| Remove misleading statement about status 415 from Section 9.3. See | ||||
| issue 250 [26]. | ||||
| Rephrase introduction to Section 9.10.1. See issue 251 [27]. | ||||
| Rewrite Section 9.10.4 to become consistent with whatever Section 7.3 | ||||
| says. See issue 252 [28]. | ||||
| Rephrase statement about shared locks in Section 6.2. See issue | ||||
| 254 [29]. | ||||
| Remove redundant language from Section 10.1. See issue 255 [30]. | ||||
| Update front matter to say "Updates: 3253" (no change tracking). | ||||
| Note the nature of the change in Section 14.24. See issue 258 [31]. | ||||
| Rephrase sentence about unlock notifications (Section 6.6) so that it | ||||
| becomes clear that those are not specified by WebDAV. See issue | ||||
| 259 [32]. | ||||
| Restore missing text from [RFC2518] (see Section 15.8). See issue | ||||
| 260 [33]. | ||||
| Add registration procedure and registry references; add information | ||||
| about Status-URI to Section 21.3, add HTTP status code registration | ||||
| (Section 21.4). See issue 264 [34]. | ||||
| Clarify the requirement about the ordering of instructions inside the | ||||
| PROPPATCH request in Section 9.2. | ||||
| Add reference for UTF-16 in Section 19. Make the UTF-8 reference | ||||
| informative (the normative reference is already made through XML- | ||||
| REC). | ||||
| Remove incorrect claim from Appendix F that the UTF-16 requirement is | ||||
| new (it was always required to support UTF-16 because of the | ||||
| requirements inherited from XML-REC). | ||||
| Add missing whitespace in If header example. | ||||
| Index | ||||
| C | ||||
| Condition Names | ||||
| DAV:cannot-modify-protected-property (pre) 110 | ||||
| DAV:lock-token-matches-request-uri (pre) 109 | ||||
| DAV:lock-token-submitted (pre) 109 | ||||
| DAV:no-conflicting-lock (pre) 110 | ||||
| DAV:no-external-entities (pre) 110 | ||||
| DAV:preserved-live-properties (post) 110 | ||||
| DAV:propfind-finite-depth (pre) 110 | ||||
| D | ||||
| DAV:cannot-modify-protected-property 110 | ||||
| DAV:lock-token-matches-request-uri 109 | ||||
| DAV:lock-token-submitted precondition 109 | ||||
| DAV:no-conflicting-lock precondition 110 | ||||
| DAV:no-external-entities precondition 110 | ||||
| DAV:preserved-live-properties 110 | ||||
| DAV:propfind-finite-depth 110 | ||||
| Author's Address | Author's Address | |||
| Lisa Dusseault (editor) | Lisa Dusseault (editor) | |||
| CommerceNet | CommerceNet | |||
| 2064 Edgewood Dr. | 2064 Edgewood Dr. | |||
| Palo Alto, CA 94303 | Palo Alto, CA 94303 | |||
| US | US | |||
| Email: ldusseault@commerce.net | Email: ldusseault@commerce.net | |||
| Full Copyright Statement | Full Copyright Statement | |||
| Copyright (C) The IETF Trust (2007). | Copyright (C) The IETF Trust (2008). | |||
| This document is subject to the rights, licenses and restrictions | This document is subject to the rights, licenses and restrictions | |||
| contained in BCP 78, and except as set forth therein, the authors | contained in BCP 78, and except as set forth therein, the authors | |||
| retain all their rights. | retain all their rights. | |||
| This document and the information contained herein are provided on an | This document and the information contained herein are provided on an | |||
| "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | |||
| OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND | OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND | |||
| THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS | THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS | |||
| OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF | OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF | |||
| End of changes. 143 change blocks. | ||||
| 588 lines changed or deleted | 906 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||