summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc5842.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc5842.txt')
-rw-r--r--doc/rfc/rfc5842.txt2523
1 files changed, 2523 insertions, 0 deletions
diff --git a/doc/rfc/rfc5842.txt b/doc/rfc/rfc5842.txt
new file mode 100644
index 0000000..555ec33
--- /dev/null
+++ b/doc/rfc/rfc5842.txt
@@ -0,0 +1,2523 @@
+
+
+
+
+
+
+Internet Engineering Task Force (IETF) G. Clemm
+Request for Comments: 5842 IBM
+Category: Experimental J. Crawford
+ISSN: 2070-1721 IBM Research
+ J. Reschke, Ed.
+ greenbytes
+ J. Whitehead
+ U.C. Santa Cruz
+ April 2010
+
+
+ Binding Extensions to
+ Web Distributed Authoring and Versioning (WebDAV)
+
+Abstract
+
+ This specification defines bindings, and the BIND method for creating
+ multiple bindings to the same resource. Creating a new binding to a
+ resource causes at least one new URI to be mapped to that resource.
+ Servers are required to ensure the integrity of any bindings that
+ they allow to be created.
+
+Status of This Memo
+
+ This document is not an Internet Standards Track specification; it is
+ published for examination, experimental implementation, and
+ evaluation.
+
+ This document defines an Experimental Protocol for the Internet
+ community. This document is a product of the Internet Engineering
+ Task Force (IETF). It represents the consensus of the IETF
+ community. It has received public review and has been approved for
+ publication by the Internet Engineering Steering Group (IESG). Not
+ all documents approved by the IESG are a candidate for any level of
+ Internet Standard; see Section 2 of RFC 5741.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ http://www.rfc-editor.org/info/rfc5842.
+
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Experimental [Page 1]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+Copyright Notice
+
+ Copyright (c) 2010 IETF Trust and the persons identified as the
+ document authors. All rights reserved.
+
+ This document is subject to BCP 78 and the IETF Trust's Legal
+ Provisions Relating to IETF Documents
+ (http://trustee.ietf.org/license-info) in effect on the date of
+ publication of this document. Please review these documents
+ carefully, as they describe your rights and restrictions with respect
+ to this document. Code Components extracted from this document must
+ include Simplified BSD License text as described in Section 4.e of
+ the Trust Legal Provisions and are provided without warranty as
+ described in the Simplified BSD License.
+
+ This document may contain material from IETF Documents or IETF
+ Contributions published or made publicly available before November
+ 10, 2008. The person(s) controlling the copyright in some of this
+ material may not have granted the IETF Trust the right to allow
+ modifications of such material outside the IETF Standards Process.
+ Without obtaining an adequate license from the person(s) controlling
+ the copyright in such materials, this document may not be modified
+ outside the IETF Standards Process, and derivative works of it may
+ not be created outside the IETF Standards Process, except to format
+ it for publication as an RFC or to translate it into languages other
+ than English.
+
+Table of Contents
+
+ 1. Introduction ....................................................4
+ 1.1. Terminology ................................................5
+ 1.2. Method Preconditions and Postconditions ....................6
+ 2. Overview of Bindings ............................................7
+ 2.1. Bindings to Collections ....................................7
+ 2.1.1. Bind Loops ..........................................8
+ 2.2. URI Mappings Created by a New Binding ......................8
+ 2.3. COPY and Bindings ..........................................9
+ 2.3.1. Example: COPY with "Depth: infinity" in
+ Presence of Bind Loops .............................11
+ 2.3.2. Example: COPY Updating Multiple Bindings ...........13
+ 2.3.3. Example: COPY with "Depth: infinity" with
+ Multiple Bindings to a Leaf Resource ...............14
+ 2.4. DELETE and Bindings .......................................15
+ 2.5. MOVE and Bindings .........................................15
+ 2.5.1. Example: Simple MOVE ...............................16
+ 2.5.2. Example: MOVE Request Causing a Bind Loop ..........16
+ 2.6. PROPFIND and Bindings .....................................18
+
+
+
+
+Clemm, et al. Experimental [Page 2]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ 2.7. Determining Whether Two Bindings Are to the Same
+ Resource ..................................................18
+ 2.8. Discovering the Bindings to a Resource ....................19
+ 3. Properties .....................................................19
+ 3.1. DAV:resource-id Property ..................................20
+ 3.2. DAV:parent-set Property ...................................20
+ 3.2.1. Example for DAV:parent-set Property ................20
+ 4. BIND Method ....................................................21
+ 4.1. Example: BIND .............................................24
+ 5. UNBIND Method ..................................................24
+ 5.1. Example: UNBIND ...........................................26
+ 6. REBIND Method ..................................................26
+ 6.1. Example: REBIND ...........................................28
+ 6.2. Example: REBIND in Presence of Locks and Bind Loops .......29
+ 7. Additional Status Codes ........................................31
+ 7.1. 208 Already Reported ......................................31
+ 7.1.1. Example: PROPFIND by Bind-Aware Client .............32
+ 7.1.2. Example: PROPFIND by Non-Bind-Aware Client .........34
+ 7.2. 508 Loop Detected .........................................34
+ 8. Capability Discovery ...........................................34
+ 8.1. OPTIONS Method ............................................34
+ 8.2. 'DAV' Request Header ......................................34
+ 9. Relationship to Locking in WebDAV ..............................35
+ 9.1. Example: Locking and Multiple Bindings ....................36
+ 10. Relationship to WebDAV Access Control Protocol ................37
+ 11. Relationship to Versioning Extensions to WebDAV ...............37
+ 12. Security Considerations .......................................40
+ 12.1. Privacy Concerns .........................................40
+ 12.2. Bind Loops ...............................................40
+ 12.3. Bindings and Denial of Service ...........................40
+ 12.4. Private Locations May Be Revealed ........................40
+ 12.5. DAV:parent-set and Denial of Service .....................41
+ 13. Internationalization Considerations ...........................41
+ 14. IANA Considerations ...........................................41
+ 15. Acknowledgements ..............................................41
+ 16. References ....................................................41
+ 16.1. Normative References .....................................41
+ 16.2. Informative References ...................................42
+ Index .............................................................42
+
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Experimental [Page 3]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+1. Introduction
+
+ This specification extends the WebDAV Distributed Authoring Protocol
+ ([RFC4918]) to enable clients to create new access paths to existing
+ resources. This capability is useful for several reasons:
+
+ URIs of WebDAV-compliant resources are hierarchical and correspond to
+ a hierarchy of collections in resource space. The WebDAV Distributed
+ Authoring Protocol makes it possible to organize these resources into
+ hierarchies, placing them into groupings, known as collections, which
+ are more easily browsed and manipulated than a single flat
+ collection. However, hierarchies require categorization decisions
+ that locate resources at a single location in the hierarchy, a
+ drawback when a resource has multiple valid categories. For example,
+ in a hierarchy of vehicle descriptions containing collections for
+ cars and boats, a description of a combination car/boat vehicle could
+ belong in either collection. Ideally, the description should be
+ accessible from both. Allowing clients to create new URIs that
+ access the existing resource lets them put that resource into
+ multiple collections.
+
+ Hierarchies also make resource sharing more difficult, since
+ resources that have utility across many collections are still forced
+ into a single collection. For example, the mathematics department at
+ one university might create a collection of information on fractals
+ that contains bindings to some local resources but also provides
+ access to some resources at other universities. For many reasons, it
+ may be undesirable to make physical copies of the shared resources on
+ the local server, for example, to conserve disk space, to respect
+ copyright constraints, or to make any changes in the shared resources
+ visible automatically. Being able to create new access paths to
+ existing resources in other collections or even on other servers is
+ useful for this sort of case.
+
+ The BIND method, defined here, provides a mechanism for allowing
+ clients to create alternative access paths to existing WebDAV
+ resources. HTTP [RFC2616] and WebDAV [RFC4918] methods are able to
+ work because there are mappings between URIs and resources. A method
+ is addressed to a URI, and the server follows the mapping from that
+ URI to a resource, applying the method to that resource. Multiple
+ URIs may be mapped to the same resource, but until now, there has
+ been no way for clients to create additional URIs mapped to existing
+ resources.
+
+ BIND lets clients associate a new URI with an existing WebDAV
+ resource, and this URI can then be used to submit requests to the
+ resource. Since URIs of WebDAV resources are hierarchical, and
+ correspond to a hierarchy of collections in resource space, the BIND
+
+
+
+Clemm, et al. Experimental [Page 4]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ method also has the effect of adding the resource to a collection.
+ As new URIs are associated with the resource, it appears in
+ additional collections.
+
+ A BIND request does not create a new resource, but simply makes a new
+ URI for submitting requests to an existing resource available. The
+ new URI is indistinguishable from any other URI when submitting a
+ request to a resource. Only one round trip is needed to submit a
+ request to the intended target. Servers are required to enforce the
+ integrity of the relationships between the new URIs and the resources
+ associated with them. Consequently, it may be very costly for
+ servers to support BIND requests that cross server boundaries.
+
+ This specification is organized as follows. Section 1.1 defines
+ terminology used in the rest of the specification, while Section 2
+ overviews bindings. Section 3 defines the new properties needed to
+ support multiple bindings to the same resource. Section 4 specifies
+ the BIND method, used to create multiple bindings to the same
+ resource. Section 5 specifies the UNBIND method, used to remove a
+ binding to a resource. Section 6 specifies the REBIND method, used
+ to move a binding to another collection.
+
+1.1. Terminology
+
+ The terminology used here follows and extends that in the WebDAV
+ Distributed Authoring Protocol specification [RFC4918].
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
+ document are to be interpreted as described in [RFC2119].
+
+ This document uses XML DTD fragments ([XML]) as a notational
+ convention, using the rules defined in Section 17 of [RFC4918].
+
+ URI Mapping
+
+ A relation between an absolute URI and a resource. For an
+ absolute URI U and the resource it identifies R, the URI mapping
+ can be thought of as (U => R). Since a resource can represent
+ items that are not network retrievable as well as those that are,
+ it is possible for a resource to have zero, one, or many URI
+ mappings. Mapping a resource to an "http"-scheme URI makes it
+ possible to submit HTTP requests to the resource using the URI.
+
+ Path Segment
+
+ Informally, the characters found between slashes ("/") in a URI.
+ Formally, as defined in Section 3.3 of [RFC3986].
+
+
+
+Clemm, et al. Experimental [Page 5]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ Binding
+
+ A relation between a single path segment (in a collection) and a
+ resource. A binding is part of the state of a collection. If two
+ different collections contain a binding between the same path
+ segment and the same resource, these are two distinct bindings.
+ So for a collection C, a path segment S, and a resource R, the
+ binding can be thought of as C:(S -> R). Bindings create URI
+ mappings, and hence allow requests to be sent to a single resource
+ from multiple locations in a URI namespace. For example, given a
+ collection C (accessible through the URI
+ http://www.example.com/CollX), a path segment S (equal to
+ "foo.html"), and a resource R, then creating the binding C: (S ->
+ R) makes it possible to use the URI
+ http://www.example.com/CollX/foo.html to access R.
+
+ Collection
+
+ A resource that contains, as part of its state, a set of bindings
+ that identify internal member resources.
+
+ Internal Member URI
+
+ The URI that identifies an internal member of a collection and
+ that consists of the URI for the collection, followed by a slash
+ character ('/'), followed by the path segment of the binding for
+ that internal member.
+
+ Binding Integrity
+
+ The property of a binding that says that:
+
+ * the binding continues to exist, and
+
+ * the identity of the resource identified by that binding does
+ not change,
+
+ unless an explicit request is executed that is defined to delete
+ that binding (examples of requests that delete a binding are
+ DELETE, MOVE, and -- defined later on -- UNBIND and REBIND).
+
+1.2. Method Preconditions and Postconditions
+
+ See Section 16 of [RFC4918] for the definitions of "precondition" and
+ "postcondition".
+
+
+
+
+
+
+Clemm, et al. Experimental [Page 6]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+2. Overview of Bindings
+
+ Bindings are part of the state of a collection. They define the
+ internal members of the collection and the names of those internal
+ members.
+
+ Bindings are added and removed by a variety of existing HTTP methods.
+ A method that creates a new resource, such as PUT, COPY, and MKCOL,
+ adds a binding. A method that deletes a resource, such as DELETE,
+ removes a binding. A method that moves a resource (e.g., MOVE) both
+ adds a binding (in the destination collection) and removes a binding
+ (in the source collection). The BIND method introduced here provides
+ a mechanism for adding a second binding to an existing resource.
+ There is no difference between an initial binding added by PUT, COPY,
+ or MKCOL and additional bindings added with BIND.
+
+ It would be very undesirable if one binding could be destroyed as a
+ side effect of operating on the resource through a different binding.
+ In particular, the removal of one binding to a resource (e.g., with a
+ DELETE or a MOVE) MUST NOT disrupt another binding to that resource,
+ e.g., by turning that binding into a dangling path segment. The
+ server MUST NOT reclaim system resources after removing one binding,
+ while other bindings to the resource remain. In other words, the
+ server MUST maintain the integrity of a binding. It is permissible,
+ however, for future method definitions (e.g., a DESTROY method) to
+ have semantics that explicitly remove all bindings and/or immediately
+ reclaim system resources.
+
+ Note: the collection model described herein is not compatible with
+ systems in which resources inherit properties based solely on the
+ access path, as the ability to create additional bindings will
+ cause a single resource to appear as member of several different
+ collections at the same time.
+
+2.1. Bindings to Collections
+
+ Creating a new binding to a collection makes each resource associated
+ with a binding in that collection accessible via a new URI, and thus
+ creates new URI mappings to those resources but no new bindings.
+
+ For example, suppose a new binding CollY is created for collection C1
+ in the figure below. It immediately becomes possible to access
+ resource R1 using the URI /CollY/x.gif and to access resource R2
+ using the URI /CollY/y.jpg, but no new bindings for these child
+ resources were created. This is because bindings are part of the
+ state of a collection, and they associate a URI that is relative to
+
+
+
+
+
+Clemm, et al. Experimental [Page 7]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ that collection with its target resource. No change to the bindings
+ in Collection C1 is needed to make its children accessible using
+ /CollY/x.gif and /CollY/y.jpg.
+
+ +-------------------------+
+ | Root Collection |
+ | bindings: |
+ | CollX CollY |
+ +-------------------------+
+ | /
+ | /
+ | /
+ +------------------+
+ | Collection C1 |
+ | bindings: |
+ | x.gif y.jpg |
+ +------------------+
+ | \
+ | \
+ | \
+ +-------------+ +-------------+
+ | Resource R1 | | Resource R2 |
+ +-------------+ +-------------+
+
+2.1.1. Bind Loops
+
+ Bindings to collections can result in loops ("cycles"), which servers
+ MUST detect when processing "Depth: infinity" requests. It is
+ sometimes possible to complete an operation in spite of the presence
+ of a loop. For instance, a PROPFIND can still succeed if the server
+ uses the new status code 208 (Already Reported) defined in
+ Section 7.1.
+
+ However, the 508 (Loop Detected) status code is defined in
+ Section 7.2 for use in contexts where an operation is terminated
+ because a loop was encountered.
+
+ Support for loops is OPTIONAL: servers MAY reject requests that would
+ lead to the creation of a bind loop (see DAV:cycle-allowed
+ precondition defined in Section 4).
+
+2.2. URI Mappings Created by a New Binding
+
+ Suppose a binding from "Binding-Name" to resource R is to be added to
+ a collection, C. Then if C-MAP is the set of URIs that were mapped
+ to C before the BIND request, then for each URI "C-URI" in C-MAP, the
+ URI "C-URI/Binding-Name" is mapped to resource R following the BIND
+ request.
+
+
+
+Clemm, et al. Experimental [Page 8]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ For example, if a binding from "foo.html" to R is added to a
+ collection C, and if the following URIs are mapped to C:
+
+ http://www.example.com/A/1/
+ http://example.com/A/one/
+
+ then the following new mappings to R are introduced:
+
+ http://www.example.com/A/1/foo.html
+ http://example.com/A/one/foo.html
+
+ Note that if R is a collection, additional URI mappings are created
+ to the descendents of R. Also, note that if a binding is made in
+ collection C to C itself (or to a parent of C), an infinite number of
+ mappings are introduced.
+
+ For example, if a binding from "myself" to C is then added to C, the
+ following infinite number of additional mappings to C are introduced:
+
+ http://www.example.com/A/1/myself
+ http://www.example.com/A/1/myself/myself
+ ...
+
+ and the following infinite number of additional mappings to R are
+ introduced:
+
+ http://www.example.com/A/1/myself/foo.html
+ http://www.example.com/A/1/myself/myself/foo.html
+ ...
+
+2.3. COPY and Bindings
+
+ As defined in Section 9.8 of [RFC4918], COPY causes the resource
+ identified by the Request-URI to be duplicated and makes the new
+ resource accessible using the URI specified in the Destination
+ header. Upon successful completion of a COPY, a new binding is
+ created between the last path segment of the Destination header and
+ the destination resource. The new binding is added to its parent
+ collection, identified by the Destination header minus its final
+ segment.
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Experimental [Page 9]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ The following figure shows an example: suppose that a COPY is issued
+ to URI-3 for resource R (which is also mapped to URI-1 and URI-2),
+ with the Destination header set to URI-X. After successful
+ completion of the COPY operation, resource R is duplicated to create
+ resource R', and a new binding has been created that creates at least
+ the URI mapping between URI-X and the new resource (although other
+ URI mappings may also have been created).
+
+ URI-1 URI-2 URI-3 URI-X
+ | | | |
+ | | | <---- URI Mappings ----> |
+ | | | |
+ +---------------------+ +------------------------+
+ | Resource R | | Resource R' |
+ +---------------------+ +------------------------+
+
+ It might be thought that a COPY request with "Depth: 0" on a
+ collection would duplicate its bindings, since bindings are part of
+ the collection's state. This is not the case, however. The
+ definition of Depth in [RFC4918] makes it clear that a "Depth: 0"
+ request does not apply to a collection's members. Consequently, a
+ COPY with "Depth: 0" does not duplicate the bindings contained by the
+ collection.
+
+ If a COPY request causes an existing resource to be updated, the
+ bindings to that resource MUST be unaffected by the COPY request.
+ Using the preceding example, suppose that a COPY request is issued to
+ URI-X for resource R', with the Destination header set to URI-2. The
+ content and dead properties of resource R would be updated to be a
+ copy of those of resource R', but the mappings from URI-1, URI-2, and
+ URI-3 to resource R remain unaffected. If, because of multiple
+ bindings to a resource, more than one source resource updates a
+ single destination resource, the order of the updates is server
+ defined (see Section 2.3.2 for an example).
+
+ If a COPY request would cause a new resource to be created as a copy
+ of an existing resource, and that COPY request has already created a
+ copy of that existing resource, the COPY request instead creates
+ another binding to the previous copy, instead of creating a new
+ resource (see Section 2.3.3 for an example).
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Experimental [Page 10]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+2.3.1. Example: COPY with "Depth: infinity" in Presence of Bind Loops
+
+ As an example of how COPY with "Depth: infinity" would work in the
+ presence of bindings, consider the following collection:
+
+ +------------------+
+ | Root Collection |
+ | bindings: |
+ | CollX |
+ +------------------+
+ |
+ |
+ +-------------------------------+
+ | Collection C1 |<-------+
+ | bindings: | |
+ | x.gif CollY | |
+ +-------------------------------+ |
+ | \ (creates loop) |
+ | \ |
+ +-------------+ +------------------+ |
+ | Resource R1 | | Collection C2 | |
+ +-------------+ | bindings: | |
+ | y.gif CollZ | |
+ +------------------+ |
+ | | |
+ | +--------+
+ |
+ +-------------+
+ | Resource R2 |
+ +-------------+
+
+ If a COPY request with "Depth: infinity" is submitted to /CollX, with
+ a destination of /CollA, the outcome of the copy operation is that a
+ copy of the tree is replicated to the target /CollA:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Experimental [Page 11]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ +------------------+
+ | Root Collection |
+ | bindings: |
+ | CollX CollA |
+ +------------------+
+ | |
+ | +---------------------------+
+ | |
+ +-------------------+ |
+ | Collection C1 |<------------------+ |
+ | bindings: | | |
+ | x.gif CollY | | |
+ +-------------------+ | |
+ | \ (creates loop) | |
+ | \ | |
+ +-------------+ +-----------------+ | |
+ | Resource R1 | | Collection C2 | | |
+ +-------------+ | bindings: | | |
+ | y.gif CollZ | | |
+ +-----------------+ | |
+ | | | |
+ | +-------+ |
+ | |
+ +-------------+ |
+ | Resource R2 | |
+ +-------------+ |
+ |
+ +-------------------------------+
+ |
+ +-------------------+
+ | Collection C3 |<------------------+
+ | bindings: | |
+ | x.gif CollY | |
+ +-------------------+ |
+ | \ (creates loop) |
+ | \ |
+ +-------------+ +-----------------+ |
+ | Resource R3 | | Collection C4 | |
+ +-------------+ | bindings: | |
+ | y.gif CollZ | |
+ +-----------------+ |
+ | | |
+ | +-------+
+ |
+ +-------------+
+ | Resource R4 |
+ +-------------+
+
+
+
+
+Clemm, et al. Experimental [Page 12]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ Note that the same would apply for more complex loops.
+
+2.3.2. Example: COPY Updating Multiple Bindings
+
+ Given the following collection hierarchy:
+
+ +------------------+
+ | Root Collection |
+ | bindings: |
+ | CollX CollY |
+ +------------------+
+ / \
+ / \
+ / \
+ +--------------------------+ +-----------------+
+ | Collection C1 | | Collection C2 |
+ | bindings: | | bindings: |
+ | x.gif y.gif | | x.gif y.gif |
+ +--------------------------+ +-----------------+
+ | | | |
+ | | | |
+ +-------------+ +-------------+ +-------------+
+ | Resource R1 | | Resource R2 | | Resource R3 |
+ +-------------+ +-------------+ +-------------+
+
+ A COPY of /CollX with "Depth: infinity" to /CollY will not result in
+ a changed hierarchy, and Resource R3 will be updated with the content
+ of either Resource R1 or Resource R2.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Experimental [Page 13]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+2.3.3. Example: COPY with "Depth: infinity" with Multiple Bindings to a
+ Leaf Resource
+
+ Given the following collection hierarchy:
+
+ +------------------+
+ | Root Collection |
+ | bindings: |
+ | CollX |
+ +------------------+
+ |
+ |
+ |
+ +----------------+
+ | Collection C1 |
+ | bindings: |
+ | x.gif y.gif |
+ +----------------+
+ | |
+ | |
+ +-------------+
+ | Resource R1 |
+ +-------------+
+
+ A COPY of /CollX with "Depth: infinity" to /CollY results in the
+ following collection hierarchy:
+
+ +------------------+
+ | Root Collection |
+ | bindings: |
+ | CollX CollY |
+ +------------------+
+ | \
+ | \
+ | \
+ +----------------+ +-----------------+
+ | Collection C1 | | Collection C2 |
+ | bindings: | | bindings: |
+ | x.gif y.gif | | x.gif y.gif |
+ +----------------+ +-----------------+
+ | | | |
+ | | | |
+ +-------------+ +-------------+
+ | Resource R1 | | Resource R2 |
+ +-------------+ +-------------+
+
+
+
+
+
+
+Clemm, et al. Experimental [Page 14]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+2.4. DELETE and Bindings
+
+ When there are multiple bindings to a resource, a DELETE applied to
+ that resource MUST NOT remove any bindings to that resource other
+ than the one identified by the Request-URI. For example, suppose the
+ collection identified by the URI "/a" has a binding named "x" to a
+ resource R, and another collection identified by "/b" has a binding
+ named "y" to the same resource R. Then, a DELETE applied to "/a/x"
+ removes the binding named "x" from "/a" but MUST NOT remove the
+ binding named "y" from "/b" (i.e., after the DELETE, "/y/b" continues
+ to identify the resource R).
+
+ When DELETE is applied to a collection, it MUST NOT modify the
+ membership of any other collection that is not itself a member of the
+ collection being deleted. For example, if both "/a/.../x" and
+ "/b/.../y" identify the same collection, C, then applying DELETE to
+ "/a" must not delete an internal member from C or from any other
+ collection that is a member of C, because that would modify the
+ membership of "/b".
+
+ If a collection supports the UNBIND method (see Section 5), a DELETE
+ of an internal member of a collection MAY be implemented as an UNBIND
+ request. In this case, applying DELETE to a Request-URI has the
+ effect of removing the binding identified by the final segment of the
+ Request-URI from the collection identified by the Request-URI minus
+ its final segment. Although [RFC4918] allows a DELETE to be a non-
+ atomic operation, when the DELETE operation is implemented as an
+ UNBIND, the operation is atomic. In particular, a DELETE on a
+ hierarchy of resources is simply the removal of a binding to the
+ collection identified by the Request-URI.
+
+2.5. MOVE and Bindings
+
+ When MOVE is applied to a resource, the other bindings to that
+ resource MUST be unaffected; and if the resource being moved is a
+ collection, the bindings to any members of that collection MUST be
+ unaffected. Also, if MOVE is used with Overwrite:T to delete an
+ existing resource, the constraints specified for DELETE apply.
+
+ If the destination collection of a MOVE request supports the REBIND
+ method (see Section 6), a MOVE of a resource into that collection MAY
+ be implemented as a REBIND request. Although [RFC4918] allows a MOVE
+ to be a non-atomic operation, when the MOVE operation is implemented
+ as a REBIND, the operation is atomic. In particular, applying a MOVE
+ to a Request-URI and a Destination URI has the effect of removing a
+ binding to a resource (at the Request-URI) and creating a new binding
+
+
+
+
+
+Clemm, et al. Experimental [Page 15]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ to that resource (at the Destination URI). Even when the Request-URI
+ identifies a collection, the MOVE operation involves only removing
+ one binding to that collection and adding another.
+
+2.5.1. Example: Simple MOVE
+
+ As an example, suppose that a MOVE is issued to URI-3 for resource R
+ below (which is also mapped to URI-1 and URI-2), with the Destination
+ header set to URI-X. After successful completion of the MOVE
+ operation, a new binding has been created that creates the URI
+ mapping between URI-X and resource R. The binding corresponding to
+ the final segment of URI-3 has been removed, which also causes the
+ URI mapping between URI-3 and R to be removed. If resource R were a
+ collection, old URI-3-based mappings to members of R would have been
+ removed, and new URI-X-based mappings to members of R would have been
+ created.
+
+ >> Before Request:
+
+ URI-1 URI-2 URI-3
+ | | |
+ | | | <---- URI Mappings
+ | | |
+ +---------------------+
+ | Resource R |
+ +---------------------+
+
+ >> After Request:
+
+ URI-1 URI-2 URI-X
+ | | |
+ | | | <---- URI Mappings
+ | | |
+ +---------------------+
+ | Resource R |
+ +---------------------+
+
+2.5.2. Example: MOVE Request Causing a Bind Loop
+
+ Note that in the presence of collection bindings, a MOVE request can
+ cause the creation of a bind loop.
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Experimental [Page 16]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ Consider the top-level collections C1 and C2 with URIs "/CollW/" and
+ "/CollX/". C1 also contains an additional binding named "CollY" to
+ C2:
+
+ +------------------+
+ | Root Collection |
+ | bindings: |
+ | CollW CollX |
+ +------------------+
+ | |
+ | |
+ +------------------+ |
+ | Collection C1 | |
+ | bindings: | |
+ | CollY | |
+ +------------------+ |
+ | |
+ | |
+ +------------------+
+ | Collection C2 |
+ | |
+ | |
+ +------------------+
+
+ In this case, the MOVE request below would cause a bind loop:
+
+ >> Request:
+
+ MOVE /CollW HTTP/1.1
+ Host: example.com
+ Destination: /CollX/CollZ
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Experimental [Page 17]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ If the request succeeded, the resulting state would be:
+
+ +------------------+
+ | Root Collection |
+ | bindings: |
+ | CollX |
+ +------------------+
+ |
+ |
+ +------------------+ |
+ | Collection C1 | |
+ +----> | bindings: | |
+ | | CollY | |
+ | +------------------+ |
+ | | |
+ | | |
+ | +------------------+
+ | | Collection C2 |
+ | | bindings: |
+ | | CollZ |
+ | +------------------+
+ | |
+ | |
+ +-------------------+
+
+2.6. PROPFIND and Bindings
+
+ Consistent with [RFC4918], the value of a dead property MUST be
+ independent of the number of bindings to its host resource or of the
+ path submitted to PROPFIND. On the other hand, the behavior for each
+ live property depends on its individual definition (for example, see
+ [RFC3744], Section 5, Paragraph 2 for a case where the value is
+ independent of its path and bindings, and [RFC4918], Section 8.8 for
+ a discussion about the live properties DAV:getetag and DAV:
+ getlastmodified, which may behave differently).
+
+2.7. Determining Whether Two Bindings Are to the Same Resource
+
+ It is useful to have some way of determining whether two bindings are
+ to the same resource. Two resources might have identical contents
+ and properties, but not be the same resource (e.g., an update to one
+ resource does not affect the other resource).
+
+ The REQUIRED DAV:resource-id property defined in Section 3.1 is a
+ resource identifier, which MUST be unique across all resources for
+ all time. If the values of DAV:resource-id returned by PROPFIND
+
+
+
+
+
+Clemm, et al. Experimental [Page 18]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ requests through two bindings are identical character by character,
+ the client can be assured that the two bindings are to the same
+ resource.
+
+ The DAV:resource-id property is created, and its value assigned, when
+ the resource is created. The value of DAV:resource-id MUST NOT be
+ changed. Even after the resource is no longer accessible through any
+ URI, that value MUST NOT be reassigned to another resource's DAV:
+ resource-id property.
+
+ Any method that creates a new resource MUST assign a new, unique
+ value to its DAV:resource-id property. For example, a PUT applied to
+ a null resource, COPY (when not overwriting an existing target) and
+ CHECKIN (see [RFC3253], Section 4.4) must assign a new, unique value
+ to the DAV:resource-id property of the new resource they create.
+
+ On the other hand, any method that affects an existing resource must
+ not change the value of its DAV:resource-id property. Specifically,
+ a PUT or a COPY that updates an existing resource must not change the
+ value of its DAV:resource-id property. A REBIND, since it does not
+ create a new resource, but only changes the location of an existing
+ resource, must not change the value of the DAV:resource-id property.
+
+2.8. Discovering the Bindings to a Resource
+
+ An OPTIONAL DAV:parent-set property on a resource provides a list of
+ the bindings that associate a collection and a URI segment with that
+ resource. If the DAV:parent-set property exists on a given resource,
+ it MUST contain a complete list of all bindings to that resource that
+ the client is authorized to see. When deciding whether to support
+ the DAV:parent-set property, server implementers / administrators
+ should balance the benefits it provides against the cost of
+ maintaining the property and the security risks enumerated in
+ Sections 12.4 and 12.5.
+
+3. Properties
+
+ The bind feature introduces the properties defined below.
+
+ A DAV:allprop PROPFIND request SHOULD NOT return any of the
+ properties defined by this document. This allows a binding server to
+ perform efficiently when a naive client, which does not understand
+ the cost of asking a server to compute all possible live properties,
+ issues a DAV:allprop PROPFIND request.
+
+
+
+
+
+
+
+Clemm, et al. Experimental [Page 19]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+3.1. DAV:resource-id Property
+
+ The DAV:resource-id property is a REQUIRED property that enables
+ clients to determine whether two bindings are to the same resource.
+ The value of DAV:resource-id is a URI, and may use any registered URI
+ scheme that guarantees the uniqueness of the value across all
+ resources for all time (e.g., the urn:uuid: URN namespace defined in
+ [RFC4122] or the opaquelocktoken: URI scheme defined in [RFC4918]).
+
+ <!ELEMENT resource-id (href)>
+
+3.2. DAV:parent-set Property
+
+ The DAV:parent-set property is an OPTIONAL property that enables
+ clients to discover what collections contain a binding to this
+ resource (i.e., what collections have that resource as an internal
+ member). It contains an href/segment pair for each collection that
+ has a binding to the resource. The href identifies the collection,
+ and the segment identifies the binding name of that resource in that
+ collection.
+
+ A given collection MUST appear only once in the DAV:parent-set for
+ any given binding, even if there are multiple URI mappings to that
+ collection.
+
+ <!ELEMENT parent-set (parent)*>
+ <!ELEMENT parent (href, segment)>
+ <!ELEMENT segment (#PCDATA)>
+ <!-- PCDATA value: segment, as defined in Section 3.3 of
+ [RFC3986] -->
+
+3.2.1. Example for DAV:parent-set Property
+
+ For example, if collection C1 is mapped to both /CollX and /CollY,
+ and C1 contains a binding named "x.gif" to a resource R1, then either
+ [/CollX, x.gif] or [/CollY, x.gif] can appear in the DAV:parent-set
+ of R1, but not both. But if C1 also had a binding named "y.gif" to
+ R1, then there would be two entries for C1 in the DAV:parent-set of
+ R1 (i.e., both [/CollX, x.gif] and [/CollX, y.gif] or, alternatively,
+ both [/CollY, x.gif] and [/CollY, y.gif]).
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Experimental [Page 20]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ +-------------------------+
+ | Root Collection |
+ | bindings: |
+ | CollX CollY |
+ +-------------------------+
+ | /
+ | /
+ | /
+ +-----------------+
+ | Collection C1 |
+ | bindings: |
+ | x.gif y.gif |
+ +-----------------+
+ | |
+ | |
+ | |
+ +-------------+
+ | Resource R1 |
+ +-------------+
+
+ In this case, one possible value for the DAV:parent-set property on
+ "/CollX/x.gif" would be:
+
+ <parent-set xmlns="DAV:">
+ <parent>
+ <href>/CollX</href>
+ <segment>x.gif</segment>
+ </parent>
+ <parent>
+ <href>/CollX</href>
+ <segment>y.gif</segment>
+ </parent>
+ </parent-set>
+
+4. BIND Method
+
+ The BIND method modifies the collection identified by the Request-
+ URI, by adding a new binding from the segment specified in the BIND
+ body to the resource identified in the BIND body.
+
+ If a server cannot guarantee the integrity of the binding, the BIND
+ request MUST fail. Note that it is especially difficult to maintain
+ the integrity of cross-server bindings. Unless the server where the
+ resource resides knows about all bindings on all servers to that
+ resource, it may unwittingly destroy the resource or make it
+ inaccessible without notifying another server that manages a binding
+ to the resource. For example, if server A permits the creation of a
+
+
+
+
+Clemm, et al. Experimental [Page 21]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ binding to a resource on server B, server A must notify server B
+ about its binding and must have an agreement with B that B will not
+ destroy the resource while A's binding exists. Otherwise, server B
+ may receive a DELETE request that it thinks removes the last binding
+ to the resource and destroy the resource while A's binding still
+ exists. The precondition DAV:cross-server-binding is defined below
+ for cases where servers fail cross-server BIND requests because they
+ cannot guarantee the integrity of cross-server bindings.
+
+ By default, if there already is a binding for the specified segment
+ in the collection, the new binding replaces the existing binding.
+ This default binding replacement behavior can be overridden using the
+ Overwrite header defined in Section 10.6 of [RFC4918].
+
+ If a BIND request fails, the server state preceding the request MUST
+ be restored. This method is unsafe and idempotent (see [RFC2616],
+ Section 9.1).
+
+ Marshalling:
+
+ The request MAY include an Overwrite header.
+
+ The request body MUST be a DAV:bind XML element.
+
+ <!ELEMENT bind (segment, href)>
+
+ If the request succeeds, the server MUST return 201 (Created) when
+ a new binding was created and 200 (OK) or 204 (No Content) when an
+ existing binding was replaced.
+
+ If a response body for a successful request is included, it MUST
+ be a DAV:bind-response XML element. Note that this document does
+ not define any elements for the BIND response body, but the DAV:
+ bind-response element is defined to ensure interoperability
+ between future extensions that do define elements for the BIND
+ response body.
+
+ <!ELEMENT bind-response ANY>
+
+ Preconditions:
+
+ (DAV:bind-into-collection): The Request-URI MUST identify a
+ collection.
+
+ (DAV:bind-source-exists): The DAV:href element MUST identify a
+ resource.
+
+
+
+
+
+Clemm, et al. Experimental [Page 22]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ (DAV:binding-allowed): The resource identified by the DAV:href
+ supports multiple bindings to it.
+
+ (DAV:cross-server-binding): If the resource identified by the DAV:
+ href element in the request body is on another server from the
+ collection identified by the Request-URI, the server MUST support
+ cross-server bindings (servers that do not support cross-server
+ bindings can use this condition code to signal the client exactly
+ why the request failed).
+
+ (DAV:name-allowed): The name specified by the DAV:segment is
+ available for use as a new binding name.
+
+ (DAV:can-overwrite): If the collection already contains a binding
+ with the specified path segment, and if an Overwrite header is
+ included, the value of the Overwrite header MUST be "T".
+
+ (DAV:cycle-allowed): If the DAV:href element identifies a
+ collection, and if the Request-URI identifies a collection that is
+ a member of that collection, the server MUST support cycles in the
+ URI namespace (servers that do not support cycles can use this
+ condition code to signal the client exactly why the request
+ failed).
+
+ (DAV:locked-update-allowed): If the collection identified by the
+ Request-URI is write-locked, then the appropriate token MUST be
+ specified in an If request header.
+
+ (DAV:locked-overwrite-allowed): If the collection already contains
+ a binding with the specified path segment, and if that binding is
+ protected by a write lock, then the appropriate token MUST be
+ specified in an If request header.
+
+ Postconditions:
+
+ (DAV:new-binding): The collection MUST have a binding that maps
+ the segment specified in the DAV:segment element in the request
+ body to the resource identified by the DAV:href element in the
+ request body.
+
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Experimental [Page 23]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+4.1. Example: BIND
+
+ >> Request:
+
+ BIND /CollY HTTP/1.1
+ Host: www.example.com
+ Content-Type: application/xml; charset="utf-8"
+ Content-Length: 172
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:bind xmlns:D="DAV:">
+ <D:segment>bar.html</D:segment>
+ <D:href>http://www.example.com/CollX/foo.html</D:href>
+ </D:bind>
+
+ >> Response:
+
+ HTTP/1.1 201 Created
+ Location: http://www.example.com/CollY/bar.html
+
+ The server added a new binding to the collection,
+ "http://www.example.com/CollY", associating "bar.html" with the
+ resource identified by the URI
+ "http://www.example.com/CollX/foo.html". Clients can now use the URI
+ "http://www.example.com/CollY/bar.html" to submit requests to that
+ resource.
+
+5. UNBIND Method
+
+ The UNBIND method modifies the collection identified by the Request-
+ URI by removing the binding identified by the segment specified in
+ the UNBIND body.
+
+ Once a resource is unreachable by any URI mapping, the server MAY
+ reclaim system resources associated with that resource. If UNBIND
+ removes a binding to a resource, but there remain URI mappings to
+ that resource, the server MUST NOT reclaim system resources
+ associated with the resource.
+
+ If an UNBIND request fails, the server state preceding the request
+ MUST be restored. This method is unsafe and idempotent (see
+ [RFC2616], Section 9.1).
+
+ Marshalling:
+
+ The request body MUST be a DAV:unbind XML element.
+
+ <!ELEMENT unbind (segment)>
+
+
+
+Clemm, et al. Experimental [Page 24]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ If the request succeeds, the server MUST return 200 (OK) or 204
+ (No Content) when the binding was successfully deleted.
+
+ If a response body for a successful request is included, it MUST
+ be a DAV:unbind-response XML element. Note that this document
+ does not define any elements for the UNBIND response body, but the
+ DAV:unbind-response element is defined to ensure interoperability
+ between future extensions that do define elements for the UNBIND
+ response body.
+
+ <!ELEMENT unbind-response ANY>
+
+ Preconditions:
+
+ (DAV:unbind-from-collection): The Request-URI MUST identify a
+ collection.
+
+ (DAV:unbind-source-exists): The DAV:segment element MUST identify
+ a binding in the collection identified by the Request-URI.
+
+ (DAV:locked-update-allowed): If the collection identified by the
+ Request-URI is write-locked, then the appropriate token MUST be
+ specified in the request.
+
+ (DAV:protected-url-deletion-allowed): If the binding identified by
+ the segment is protected by a write lock, then the appropriate
+ token MUST be specified in the request.
+
+ Postconditions:
+
+ (DAV:binding-deleted): The collection MUST NOT have a binding for
+ the segment specified in the DAV:segment element in the request
+ body.
+
+ (DAV:lock-deleted): If the internal member URI of the binding
+ specified by the Request-URI and the DAV:segment element in the
+ request body was protected by a write lock at the time of the
+ request, that write lock must have been deleted by the request.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Experimental [Page 25]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+5.1. Example: UNBIND
+
+ >> Request:
+
+ UNBIND /CollX HTTP/1.1
+ Host: www.example.com
+ Content-Type: application/xml; charset="utf-8"
+ Content-Length: 117
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:unbind xmlns:D="DAV:">
+ <D:segment>foo.html</D:segment>
+ </D:unbind>
+
+ >> Response:
+
+ HTTP/1.1 200 OK
+
+ The server removed the binding named "foo.html" from the collection,
+ "http://www.example.com/CollX". A request to the resource named
+ "http://www.example.com/CollX/foo.html" will return a 404 (Not Found)
+ response.
+
+6. REBIND Method
+
+ The REBIND method removes a binding to a resource from a collection,
+ and adds a binding to that resource into the collection identified by
+ the Request-URI. The request body specifies the binding to be added
+ (segment) and the old binding to be removed (href). It is
+ effectively an atomic form of a MOVE request, and MUST be treated the
+ same way as MOVE for the purpose of determining access permissions.
+
+ If a REBIND request fails, the server state preceding the request
+ MUST be restored. This method is unsafe and idempotent (see
+ [RFC2616], Section 9.1).
+
+ Marshalling:
+
+ The request MAY include an Overwrite header.
+
+ The request body MUST be a DAV:rebind XML element.
+
+ <!ELEMENT rebind (segment, href)>
+
+ If the request succeeds, the server MUST return 201 (Created) when
+ a new binding was created and 200 (OK) or 204 (No Content) when an
+ existing binding was replaced.
+
+
+
+
+Clemm, et al. Experimental [Page 26]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ If a response body for a successful request is included, it MUST
+ be a DAV:rebind-response XML element. Note that this document
+ does not define any elements for the REBIND response body, but the
+ DAV:rebind-response element is defined to ensure interoperability
+ between future extensions that do define elements for the REBIND
+ response body.
+
+ <!ELEMENT rebind-response ANY>
+
+ Preconditions:
+
+ (DAV:rebind-into-collection): The Request-URI MUST identify a
+ collection.
+
+ (DAV:rebind-source-exists): The DAV:href element MUST identify a
+ resource.
+
+ (DAV:cross-server-binding): If the resource identified by the DAV:
+ href element in the request body is on another server from the
+ collection identified by the Request-URI, the server MUST support
+ cross-server bindings (servers that do not support cross-server
+ bindings can use this condition code to signal the client exactly
+ why the request failed).
+
+ (DAV:name-allowed): The name specified by the DAV:segment is
+ available for use as a new binding name.
+
+ (DAV:can-overwrite): If the collection already contains a binding
+ with the specified path segment, and if an Overwrite header is
+ included, the value of the Overwrite header MUST be "T".
+
+ (DAV:cycle-allowed): If the DAV:href element identifies a
+ collection, and if the Request-URI identifies a collection that is
+ a member of that collection, the server MUST support cycles in the
+ URI namespace (servers that do not support cycles can use this
+ condition code to signal the client exactly why the request
+ failed).
+
+ (DAV:locked-update-allowed): If the collection identified by the
+ Request-URI is write-locked, then the appropriate token MUST be
+ specified in the request.
+
+ (DAV:protected-url-modification-allowed): If the collection
+ identified by the Request-URI already contains a binding with the
+ specified path segment, and if that binding is protected by a
+ write lock, then the appropriate token MUST be specified in the
+ request.
+
+
+
+
+Clemm, et al. Experimental [Page 27]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ (DAV:locked-source-collection-update-allowed): If the collection
+ identified by the parent collection prefix of the DAV:href URI is
+ write-locked, then the appropriate token MUST be specified in the
+ request.
+
+ (DAV:protected-source-url-deletion-allowed): If the DAV:href URI
+ is protected by a write lock, then the appropriate token MUST be
+ specified in the request.
+
+ Postconditions:
+
+ (DAV:new-binding): The collection MUST have a binding that maps
+ the segment specified in the DAV:segment element in the request
+ body, to the resource that was identified by the DAV:href element
+ in the request body.
+
+ (DAV:binding-deleted): The URL specified in the DAV:href element
+ in the request body MUST NOT be mapped to a resource.
+
+ (DAV:lock-deleted): If the URL specified in the DAV:href element
+ in the request body was protected by a write lock at the time of
+ the request, that write lock must have been deleted by the
+ request.
+
+6.1. Example: REBIND
+
+ >> Request:
+
+ REBIND /CollX HTTP/1.1
+ Host: www.example.com
+ Content-Type: application/xml; charset="utf-8"
+ Content-Length: 176
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:rebind xmlns:D="DAV:">
+ <D:segment>foo.html</D:segment>
+ <D:href>http://www.example.com/CollY/bar.html</D:href>
+ </D:rebind>
+
+ >> Response:
+
+ HTTP/1.1 200 OK
+
+ The server added a new binding to the collection,
+ "http://www.example.com/CollX", associating "foo.html" with the
+ resource identified by the URI
+ "http://www.example.com/CollY/bar.html" and removes the binding named
+ "bar.html" from the collection identified by the URI
+
+
+
+Clemm, et al. Experimental [Page 28]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ "http://www.example.com/CollY". Clients can now use the URI
+ "http://www.example.com/CollX/foo.html" to submit requests to that
+ resource, and requests on the URI
+ "http://www.example.com/CollY/bar.html" will fail with a 404 (Not
+ Found) response.
+
+6.2. Example: REBIND in Presence of Locks and Bind Loops
+
+ To illustrate the effects of locks and bind loops on a REBIND
+ operation, consider the following collection:
+
+ +------------------+
+ | Root Collection |
+ | bindings: |
+ | CollW |
+ +------------------+
+ |
+ |
+ |
+ +-------------------------------+
+ | Collection C1 |<--------+
+ | LOCKED infinity | |
+ | (lock token L1) | |
+ | bindings: | |
+ | CollX CollY | |
+ +-------------------------------+ |
+ | | |
+ | | (creates loop) |
+ | | |
+ +-----------------+ +------------------+ |
+ | Collection C2 | | Collection C3 | |
+ | (inherit lock) | | (inherit lock) | |
+ | (lock token L1) | | (lock token L1) | |
+ | bindings: | | bindings: | |
+ | {none} | | y.gif CollZ | |
+ +-----------------+ +------------------+ |
+ | | |
+ | +-----+
+ |
+ +---------------------------+
+ | Resource R2 |
+ | (lock inherited from C1) |
+ | (lock token L1) |
+ +---------------------------+
+
+ (where L1 is "urn:uuid:f92d4fae-7012-11ab-a765-00c0ca1f6bf9").
+
+
+
+
+
+Clemm, et al. Experimental [Page 29]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ Note that the binding between CollZ and C1 creates a loop in the
+ containment hierarchy. Servers are not required to support such
+ loops, though the server in this example does.
+
+ The REBIND request below will remove the segment "CollZ" from C3 and
+ add a new binding from "CollA" to the collection C2.
+
+ REBIND /CollW/CollX HTTP/1.1
+ Host: www.example.com
+ If: (<urn:uuid:f92d4fae-7012-11ab-a765-00c0ca1f6bf9>)
+ Content-Type: application/xml; charset="utf-8"
+ Content-Length: 152
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:rebind xmlns:D="DAV:">
+ <D:segment>CollA</D:segment>
+ <D:href>/CollW/CollY/CollZ</D:href>
+ </D:rebind>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Experimental [Page 30]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ The outcome of the REBIND operation is:
+
+ +------------------+
+ | Root Collection |
+ | bindings: |
+ | CollW |
+ +------------------+
+ |
+ |
+ |
+ +-------------------------------+
+ | Collection C1 |
+ | LOCKED infinity |
+ | (lock token L1) |
+ | bindings: |
+ | CollX CollY |
+ +-------------------------------+
+ | ^ |
+ | | |
+ +-----------------+ | +------------------+
+ | Collection C2 | | | Collection C3 |
+ |(inherited lock) | | | (inherited lock) |
+ |(lock token L1) | | | (lock token L1) |
+ | bindings: | | | bindings: |
+ | CollA | | | y.gif |
+ +-----------------+ | +------------------+
+ | | |
+ +---------------+ |
+ (creates loop) |
+ +---------------------------+
+ | Resource R2 |
+ | (inherited lock from C1) |
+ | (lock token L1) |
+ +---------------------------+
+
+7. Additional Status Codes
+
+7.1. 208 Already Reported
+
+ The 208 (Already Reported) status code can be used inside a DAV:
+ propstat response element to avoid enumerating the internal members
+ of multiple bindings to the same collection repeatedly. For each
+ binding to a collection inside the request's scope, only one will be
+ reported with a 200 status, while subsequent DAV:response elements
+ for all other bindings will use the 208 status, and no DAV:response
+ elements for their descendants are included.
+
+
+
+
+
+Clemm, et al. Experimental [Page 31]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ Note that the 208 status will only occur for "Depth: infinity"
+ requests, and that it is of particular importance when the multiple
+ collection bindings cause a bind loop as discussed in Section 2.2.
+
+ A client can request the DAV:resource-id property in a PROPFIND
+ request to guarantee that they can accurately reconstruct the binding
+ structure of a collection with multiple bindings to a single
+ resource.
+
+ For backward compatibility with clients not aware of the 208 status
+ code appearing in multistatus response bodies, it SHOULD NOT be used
+ unless the client has signaled support for this specification using
+ the "DAV" request header (see Section 8.2). Instead, a 508 status
+ should be returned when a binding loop is discovered. This allows
+ the server to return the 508 as the top-level return status, if it
+ discovers it before it started the response, or in the middle of a
+ multistatus, if it discovers it in the middle of streaming out a
+ multistatus response.
+
+7.1.1. Example: PROPFIND by Bind-Aware Client
+
+ For example, consider a PROPFIND request on /Coll (bound to
+ collection C), where the members of /Coll are /Coll/Foo (bound to
+ resource R) and /Coll/Bar (bound to collection C).
+
+ >> Request:
+
+ PROPFIND /Coll/ HTTP/1.1
+ Host: www.example.com
+ Depth: infinity
+ DAV: bind
+ Content-Type: application/xml; charset="utf-8"
+ Content-Length: 152
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:propfind xmlns:D="DAV:">
+ <D:prop>
+ <D:displayname/>
+ <D:resource-id/>
+ </D:prop>
+ </D:propfind>
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Experimental [Page 32]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ >> Response:
+
+ HTTP/1.1 207 Multi-Status
+ Content-Type: application/xml; charset="utf-8"
+ Content-Length: 1241
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:multistatus xmlns:D="DAV:">
+ <D:response>
+ <D:href>http://www.example.com/Coll/</D:href>
+ <D:propstat>
+ <D:prop>
+ <D:displayname>Loop Demo</D:displayname>
+ <D:resource-id>
+ <D:href
+ >urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf8</D:href>
+ </D:resource-id>
+ </D:prop>
+ <D:status>HTTP/1.1 200 OK</D:status>
+ </D:propstat>
+ </D:response>
+ <D:response>
+ <D:href>http://www.example.com/Coll/Foo</D:href>
+ <D:propstat>
+ <D:prop>
+ <D:displayname>Bird Inventory</D:displayname>
+ <D:resource-id>
+ <D:href
+ >urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf9</D:href>
+ </D:resource-id>
+ </D:prop>
+ <D:status>HTTP/1.1 200 OK</D:status>
+ </D:propstat>
+ </D:response>
+ <D:response>
+ <D:href>http://www.example.com/Coll/Bar</D:href>
+ <D:propstat>
+ <D:prop>
+ <D:displayname>Loop Demo</D:displayname>
+ <D:resource-id>
+ <D:href
+ >urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf8</D:href>
+ </D:resource-id>
+ </D:prop>
+ <D:status>HTTP/1.1 208 Already Reported</D:status>
+ </D:propstat>
+ </D:response>
+ </D:multistatus>
+
+
+
+Clemm, et al. Experimental [Page 33]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+7.1.2. Example: PROPFIND by Non-Bind-Aware Client
+
+ In this example, the client isn't aware of the 208 status code
+ introduced by this specification. As the "Depth: infinity" PROPFIND
+ request would cause a loop condition, the whole request is rejected
+ with a 508 status.
+
+ >> Request:
+
+ PROPFIND /Coll/ HTTP/1.1
+ Host: www.example.com
+ Depth: infinity
+ Content-Type: application/xml; charset="utf-8"
+ Content-Length: 125
+
+ <?xml version="1.0" encoding="utf-8" ?>
+ <D:propfind xmlns:D="DAV:">
+ <D:prop> <D:displayname/> </D:prop>
+ </D:propfind>
+
+ >> Response:
+
+ HTTP/1.1 508 Loop Detected
+
+7.2. 508 Loop Detected
+
+ The 508 (Loop Detected) status code indicates that the server
+ terminated an operation because it encountered an infinite loop while
+ processing a request with "Depth: infinity". This status indicates
+ that the entire operation failed.
+
+8. Capability Discovery
+
+8.1. OPTIONS Method
+
+ If the server supports bindings, it MUST return the compliance class
+ name "bind" as a field in the "DAV" response header (see [RFC4918],
+ Section 10.1) from an OPTIONS request on any resource implemented by
+ that server. A value of "bind" in the "DAV" header MUST indicate
+ that the server supports all MUST-level requirements and REQUIRED
+ features specified in this document.
+
+8.2. 'DAV' Request Header
+
+ Clients SHOULD signal support for all MUST-level requirements and
+ REQUIRED features by submitting a "DAV" request header containing the
+ compliance class name "bind". In particular, the client MUST
+ understand the 208 status code defined in Section 7.1.
+
+
+
+Clemm, et al. Experimental [Page 34]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+9. Relationship to Locking in WebDAV
+
+ Locking is an optional feature of WebDAV ([RFC4918]). The base
+ WebDAV specification and this protocol extension have been designed
+ in parallel, making sure that all features of WebDAV can be
+ implemented on a server that implements this protocol as well.
+
+ Unfortunately, WebDAV uses the term "lock-root" inconsistently. It
+ is introduced in Section 6.1 of [RFC4918], point 2, as:
+
+ 2. A resource becomes directly locked when a LOCK request to a
+ URL of that resource creates a new lock. The "lock-root" of the
+ new lock is that URL. If at the time of the request, the URL is
+ not mapped to a resource, a new empty resource is created and
+ directly locked.
+
+ On the other hand, [RFC4918], Section 9.10.1 states:
+
+ A LOCK request to an existing resource will create a lock on the
+ resource identified by the Request-URI, provided the resource is
+ not already locked with a conflicting lock. The resource
+ identified in the Request-URI becomes the root of the lock.
+
+ Servers that implement both WebDAV locking and support for multiple
+ bindings MUST use the first interpretation: the lock-root is the URI
+ through which the lock was created, not a resource. This URI, and
+ potential aliases of this URI ([RFC4918], Section 5), are said to be
+ "protected" by the lock.
+
+ As defined in the introduction to Section 7 of [RFC4918], write
+ operations that modify the state of a locked resource require that
+ the lock token is submitted with the request. Consistent with
+ WebDAV, the state of the resource consists of the content ("any
+ variant"), dead properties, lockable live properties (item 1), plus,
+ for a collection, all its bindings (item 2). Note that this, by
+ definition, does not depend on the Request-URI to which the write
+ operation is applied (the locked state is a property of the resource,
+ not its URI).
+
+ However, the lock-root is the URI through which the lock was
+ requested. Thus, the protection defined in item 3 of the list does
+ not apply to additional URIs that may be mapped to the same resource
+ due to the existence of multiple bindings.
+
+
+
+
+
+
+
+
+Clemm, et al. Experimental [Page 35]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+9.1. Example: Locking and Multiple Bindings
+
+ Consider a root collection "/", containing the two collections C1 and
+ C2, named "/CollX" and "/CollY", and a child resource R, bound to C1
+ as "/CollX/test" and bound to C2 as "/CollY/test":
+
+ +-------------------------+
+ | Root Collection |
+ | bindings: |
+ | CollX CollY |
+ +-------------------------+
+ | |
+ | |
+ | |
+ +---------------+ +---------------+
+ | Collection C1 | | Collection C2 |
+ | bindings: | | bindings: |
+ | test | | test |
+ +---------------+ +---------------+
+ | |
+ | |
+ | |
+ +------------------+
+ | Resource R |
+ +------------------+
+
+ Given a host name of "www.example.com", applying a depth-zero write
+ lock to "/CollX/test" will lock the resource R, and the lock-root of
+ this lock will be "http://www.example.com/CollX/test".
+
+ Thus, the following operations will require that the associated lock
+ token is submitted with the "If" request header ([RFC4918], Section
+ 10.4):
+
+ o a PUT or PROPPATCH request modifying the content or lockable
+ properties of resource R (as R is locked) -- no matter which URI
+ is used as request target, and
+
+ o a MOVE, REBIND, UNBIND, or DELETE request causing "/CollX/test"
+ not to be mapped to resource R anymore (be it addressed to
+ "/CollX" or "/CollX/test").
+
+ The following operations will not require submission of the lock
+ token:
+
+ o a DELETE request addressed to "/CollY" or "/CollY/test", as it
+ does not affect the resource R, nor the lock-root,
+
+
+
+
+Clemm, et al. Experimental [Page 36]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ o for the same reason, an UNBIND request removing the binding "test"
+ from collection C2, or the binding "CollY" from the root
+ collection, and
+
+ o similarly, a MOVE or REBIND request causing "/CollY/test" not
+ being mapped to resource R anymore.
+
+ Note that despite the lock-root being
+ "http://www.example.com/CollX/test", an UNLOCK request can be
+ addressed through any URI mapped to resource R, as UNLOCK operates on
+ the resource identified by the Request-URI, not that URI (see
+ [RFC4918], Section 9.11).
+
+10. Relationship to WebDAV Access Control Protocol
+
+ Note that the WebDAV Access Control Protocol has been designed for
+ compatibility with systems that allow multiple URIs to map to the
+ same resource (see [RFC3744], Section 5):
+
+ Access control properties (especially DAV:acl and DAV:inherited-
+ acl-set) are defined on the resource identified by the Request-URI
+ of a PROPFIND request. A direct consequence is that if the
+ resource is accessible via multiple URI, the value of access
+ control properties is the same across these URI.
+
+ Furthermore, note that BIND and REBIND behave the same as MOVE with
+ respect to the DAV:acl property (see [RFC3744], Section 7.3).
+
+11. Relationship to Versioning Extensions to WebDAV
+
+ Servers that implement Workspaces ([RFC3253], Section 6) and Version-
+ Controlled Collections ([RFC3253], Section 14) already need to
+ implement BIND-like behavior in order to handle UPDATE and UNCHECKOUT
+ semantics.
+
+ Consider a workspace "/ws1/", containing the version-controlled,
+ checked-out collections C1 and C2, named "/ws1/CollX" and "/ws1/
+ CollY", and a version-controlled resource R, bound to C1 as "/ws1/
+ CollX/test":
+
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Experimental [Page 37]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ +-------------------------+
+ | Workspace |
+ | bindings: |
+ | CollX CollY |
+ +-------------------------+
+ | |
+ | |
+ | |
+ +---------------+ +---------------+
+ | Collection C1 | | Collection C2 |
+ | bindings: | | |
+ | test | | |
+ +---------------+ +---------------+
+ |
+ |
+ |
+ +------------------+
+ | Resource R |
+ +------------------+
+
+ Moving "/ws1/CollX/test" into "/ws1/CollY", checking in C2, but
+ undoing the checkout on C1 will undo part of the MOVE request, thus
+ restoring the binding from C1 to R, but keeping the new binding from
+ C2 to R:
+
+ >> Request:
+
+ MOVE /ws1/CollX/test HTTP/1.1
+ Host: www.example.com
+ Destination: /ws1/CollY/test
+
+ >> Response:
+
+ HTTP/1.1 204 No Content
+
+ >> Request:
+
+ CHECKIN /ws1/CollY/ HTTP/1.1
+ Host: www.example.com
+
+ >> Response:
+
+ HTTP/1.1 201 Created
+ Cache-Control: no-cache
+ Location: http://repo.example.com/his/17/ver/42
+
+
+
+
+
+
+Clemm, et al. Experimental [Page 38]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ >> Request:
+
+ UNCHECKOUT /ws1/CollX/ HTTP/1.1
+ Host: www.example.com
+
+ >> Response:
+
+ HTTP/1.1 200 OK
+ Cache-Control: no-cache
+
+ As a result, both C1 and C2 would have a binding to R:
+
+ +-------------------------+
+ | Workspace |
+ | bindings: |
+ | CollX CollY |
+ +-------------------------+
+ | |
+ | |
+ | |
+ +---------------+ +---------------+
+ | Collection C1 | | Collection C2 |
+ | bindings: | | bindings: |
+ | test | | test |
+ +---------------+ +---------------+
+ | |
+ | |
+ | |
+ +------------------+
+ | Resource R |
+ +------------------+
+
+ The MOVE semantics defined in Section 3.15 of [RFC3253] already
+ require that "/ws1/CollX/test" and "/ws1/CollY/test" will have the
+ same version history (as exposed in the DAV:version-history
+ property). Furthermore, the UNCHECKOUT semantics (which in this case
+ is similar to UPDATE, see Section 14.11 of [RFC3253]) require:
+
+ If a new version-controlled member is in a workspace that already
+ has a version-controlled resource for that version history, then
+ the new version-controlled member MUST be just a binding (i.e.,
+ another name for) that existing version-controlled resource.
+
+ Thus, "/ws1/CollX/test" and "/ws1/CollY/test" will be bindings to the
+ same resource R, and have identical DAV:resource-id properties.
+
+
+
+
+
+
+Clemm, et al. Experimental [Page 39]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+12. Security Considerations
+
+ This section is provided to make WebDAV implementers aware of the
+ security implications of this protocol.
+
+ All of the security considerations of HTTP/1.1 ([RFC2616], Section
+ 15) and the WebDAV Distributed Authoring Protocol specification
+ ([RFC4918], Section 20) also apply to this protocol specification.
+ In addition, bindings introduce several new security concerns and
+ increase the risk of some existing threats. These issues are
+ detailed below.
+
+12.1. Privacy Concerns
+
+ In a context where cross-server bindings are supported, creating
+ bindings on a trusted server may make it possible for a hostile agent
+ to induce users to send private information to a target on a
+ different server.
+
+12.2. Bind Loops
+
+ Although bind loops were already possible in HTTP 1.1, the
+ introduction of the BIND method creates a new avenue for clients to
+ create loops accidentally or maliciously. If the binding and its
+ target are on the same server, the server may be able to detect BIND
+ requests that would create loops. Servers are required to detect
+ loops that are caused by bindings to collections during the
+ processing of any requests with "Depth: infinity".
+
+12.3. Bindings and Denial of Service
+
+ Denial-of-service attacks were already possible by posting URIs that
+ were intended for limited use at heavily used Web sites. The
+ introduction of BIND creates a new avenue for similar denial-of-
+ service attacks. If cross-server bindings are supported, clients can
+ now create bindings at heavily used sites to target locations that
+ were not designed for heavy usage.
+
+12.4. Private Locations May Be Revealed
+
+ If the DAV:parent-set property is maintained on a resource, the
+ owners of the bindings risk revealing private locations. The
+ directory structures where bindings are located are available to
+ anyone who has access to the DAV:parent-set property on the resource.
+ Moving a binding may reveal its new location to anyone with access to
+ DAV:parent-set on its resource.
+
+
+
+
+
+Clemm, et al. Experimental [Page 40]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+12.5. DAV:parent-set and Denial of Service
+
+ If the server maintains the DAV:parent-set property in response to
+ bindings created in other administrative domains, it is exposed to
+ hostile attempts to make it devote resources to adding bindings to
+ the list.
+
+13. Internationalization Considerations
+
+ All internationalization considerations mentioned in Section 19 of
+ [RFC4918] also apply to this document.
+
+14. IANA Considerations
+
+ Section 7 defines the HTTP status codes 208 (Already Reported) and
+ 508 (Loop Detected), which have been added to the HTTP Status Code
+ Registry.
+
+15. Acknowledgements
+
+ This document is the collaborative product of the authors and Tyson
+ Chihaya, Jim Davis, Chuck Fay and Judith Slein. It has benefited
+ from thoughtful discussion by Jim Amsden, Peter Carlson, Steve
+ Carter, Ken Coar, Ellis Cohen, Dan Connolly, Bruce Cragun, Cyrus
+ Daboo, Spencer Dawkins, Mark Day, Werner Donne, Rajiv Dulepet, David
+ Durand, Lisa Dusseault, Stefan Eissing, Roy Fielding, Yaron Goland,
+ Joe Hildebrand, Fred Hitt, Alex Hopmann, James Hunt, Marcus Jager,
+ Chris Kaler, Manoj Kasichainula, Rohit Khare, Brian Korver, Daniel
+ LaLiberte, Steve Martin, Larry Masinter, Jeff McAffer, Alexey
+ Melnikov, Surendra Koduru Reddy, Max Rible, Sam Ruby, Bradley
+ Sergeant, Nick Shelness, John Stracke, John Tigue, John Turner, Kevin
+ Wiggen, and other members of the concluded WebDAV working group.
+
+16. References
+
+16.1. Normative References
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119, March 1997.
+
+ [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
+ Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
+ Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.
+
+ [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
+ Resource Identifier (URI): Generic Syntax", STD 66,
+ RFC 3986, January 2005.
+
+
+
+
+Clemm, et al. Experimental [Page 41]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ [RFC4918] Dusseault, L., Ed., "HTTP Extensions for Web Distributed
+ Authoring and Versioning (WebDAV)", RFC 4918, June 2007.
+
+ [XML] Bray, T., Paoli, J., Sperberg-McQueen, C., Maler, E., and
+ F. Yergeau, "Extensible Markup Language (XML) 1.0 (Fifth
+ Edition)", W3C REC-xml-20081126, November 2008,
+ <http://www.w3.org/TR/2008/REC-xml-20081126/>.
+
+16.2. Informative References
+
+ [RFC3253] Clemm, G., Amsden, J., Ellison, T., Kaler, C., and J.
+ Whitehead, "Versioning Extensions to WebDAV (Web
+ Distributed Authoring and Versioning)", RFC 3253,
+ March 2002.
+
+ [RFC3744] Clemm, G., Reschke, J., Sedlar, E., and J. Whitehead, "Web
+ Distributed Authoring and Versioning (WebDAV) Access
+ Control Protocol", RFC 3744, May 2004.
+
+ [RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally
+ Unique IDentifier (UUID) URN Namespace", RFC 4122,
+ July 2005.
+
+Index
+
+ 2
+ 208 Already Reported (status code) 31, 41
+
+ 5
+ 508 Loop Detected (status code) 34, 41
+
+ B
+ BIND method 21
+ Marshalling 22
+ Postconditions 23
+ Preconditions 22
+ Binding 6
+ Binding Integrity 6-7, 21
+
+ C
+ Collection 6
+ Condition Names
+ DAV:bind-into-collection (pre) 22
+ DAV:bind-source-exists (pre) 22
+ DAV:binding-allowed (pre) 23
+ DAV:binding-deleted (post) 25, 28
+ DAV:can-overwrite (pre) 23, 27
+ DAV:cross-server-binding (pre) 23, 27
+
+
+
+Clemm, et al. Experimental [Page 42]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ DAV:cycle-allowed (pre) 23, 27
+ DAV:lock-deleted (post) 25, 28
+ DAV:locked-overwrite-allowed (pre) 23
+ DAV:locked-source-collection-update-allowed (pre) 28
+ DAV:locked-update-allowed (pre) 23, 25, 27
+ DAV:name-allowed (pre) 23, 27
+ DAV:new-binding (post) 23, 28
+ DAV:protected-source-url-deletion-allowed (pre) 28
+ DAV:protected-url-deletion-allowed (pre) 25
+ DAV:protected-url-modification-allowed (pre) 27
+ DAV:rebind-into-collection (pre) 27
+ DAV:rebind-source-exists (pre) 27
+ DAV:unbind-from-collection (pre) 25
+ DAV:unbind-source-exists (pre) 25
+
+ D
+ DAV header
+ compliance class 'bind' 34
+ DAV:bind-into-collection precondition 22
+ DAV:bind-source-exists precondition 22
+ DAV:binding-allowed precondition 23
+ DAV:binding-deleted postcondition 25, 28
+ DAV:can-overwrite precondition 23, 27
+ DAV:cross-server-binding precondition 23, 27
+ DAV:cycle-allowed precondition 23, 27
+ DAV:lock-deleted postcondition 25, 28
+ DAV:locked-overwrite-allowed precondition 23
+ DAV:locked-source-collection-update-allowed precondition 28
+ DAV:locked-update-allowed precondition 23, 25, 27
+ DAV:name-allowed precondition 23, 27
+ DAV:new-binding postcondition 23, 28
+ DAV:parent-set property 20
+ DAV:protected-source-url-deletion-allowed precondition 28
+ DAV:protected-url-deletion-allowed precondition 25
+ DAV:protected-url-modification-allowed precondition 27
+ DAV:rebind-into-collection precondition 27
+ DAV:rebind-source-exists precondition 27
+ DAV:resource-id property 19
+ DAV:unbind-from-collection precondition 25
+ DAV:unbind-source-exists precondition 25
+
+ I
+ Internal Member URI 6
+
+ L
+ Locking 35
+
+
+
+
+
+Clemm, et al. Experimental [Page 43]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+ M
+ Methods
+ BIND 21
+ REBIND 26
+ UNBIND 24
+
+ P
+ Path Segment 5
+ Properties
+ DAV:parent-set 20
+ DAV:resource-id 19
+
+ R
+ REBIND method 26
+ Marshalling 26
+ Postconditions 28
+ Preconditions 27
+
+ S
+ Status Codes
+ 208 Already Reported 31, 41
+ 508 Loop Detected 34, 41
+
+ U
+ UNBIND method 24
+ Marshalling 24
+ Postconditions 25
+ Preconditions 25
+ URI Mapping 5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Experimental [Page 44]
+
+RFC 5842 Binding Extensions to WebDAV April 2010
+
+
+Authors' Addresses
+
+ Geoffrey Clemm
+ IBM
+ 550 King Street
+ Littleton, MA 01460
+
+ EMail: geoffrey.clemm@us.ibm.com
+
+
+ Jason Crawford
+ IBM Research
+ P.O. Box 704
+ Yorktown Heights, NY 10598
+
+ EMail: ccjason@us.ibm.com
+
+
+ Julian F. Reschke (editor)
+ greenbytes GmbH
+ Hafenweg 16
+ Muenster, NW 48155
+ Germany
+
+ EMail: julian.reschke@greenbytes.de
+
+
+ Jim Whitehead
+ UC Santa Cruz, Dept. of Computer Science
+ 1156 High Street
+ Santa Cruz, CA 95064
+
+ EMail: ejw@cse.ucsc.edu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Clemm, et al. Experimental [Page 45]
+