WEBDAV Working Group J. Slein, Xerox INTERNET DRAFT E.J. Whitehead Jr., UC Irvine<draft-ietf-webdav-binding-protocol-00.txt><draft-ietf-webdav-binding-protocol-01.txt> J. Davis, CourseNet G. Clemm, Rational C. Fay, FileNet J. Crawford, IBM T. Chihaya, DataChannelAugust 20,October 15, 1999 ExpiresFebruary 20,April 15, 2000 WebDAV Bindings Status of this Memo This document is an Internet-Draft and is in full conformance with all provisions of Section 10 of RFC2026. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet-Drafts. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress". The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html. Distribution of this document is unlimited. Please send comments to the Distributed Authoring and Versioning (WebDAV) working group at <w3c- dist-auth@w3.org>, which may be joined by sending a message with subject "subscribe" to <w3c-dist-auth-request@w3.org>. Discussions of the WEBDAV working group are archived at URL: <http://lists.w3.org/Archives/Public/w3c-dist-auth/>. Abstract The WebDAV Distributed Authoring Protocol provides basic support for collections, offering the ability to create and list unordered collections. This specification is one of a group of three specifications that supplement the WebDAV Distributed Authoring Protocol to increase the power of WebDAV collections. This specification defines bindings, one mechanism for allowing a single resource to appear in more than one collection. Bindings make this possible by creating mappings of URIs to resources. The BIND method defined here gives clients the ability to create new bindings to existing resources.[RR]The second specification, "WebDAV Redirect Reference Resources"[RR], defines redirect references, another approach to allowing a single resource to be accessed from multiple collections.[OC]The third specification, "WebDAV Ordered Collections Protocol"[OC], providesordereda mechanism for ordering collections. Table of Contents 1 Notational Conventions.......................................2 2Introduction.................................................2Introduction.................................................3 3 Terminology..................................................4 3.1 Rationale for Distinguishing Bindings from URI Mappings......7 4 Overview ofBindings.........................................7Bindings.........................................8 5 BIND Method..................................................8 5.1 Overview of BIND.............................................8 5.2 Bindings to Collections......................................9 5.3 URI Mappings Created byBIND.................................9a BIND..............................10 5.4 Example:Generating the Set ofURIMappings.................10Mappings Created by a BIND.....................10 5.5 BIND Status Codes...........................................11 5.6 Example: BIND...............................................115.7 Example: BIND Conflict......................................116 DELETE andBindings.........................................12Bindings.........................................11 7 COPY and Bindings...........................................12 8 MOVE and Bindings...........................................13 8.1 Implementation Note.........................................14 8.2 MOVE and Locks..............................................15 9 LOCK andUNLOCK.............................................15UNLOCK.............................................16 10 Bindings and OtherMethods..................................15Methods..................................17 11 Determining Whether Two Bindings Are to the Same Resource....................................................17 11.1 davresourceid URI Scheme....................................17 12 Discovering the Bindings to aResource......................16 12 Headers.....................................................16 12.1 All-Bindings Request Header.................................17Resource......................18 13 StatusCodes................................................17Codes................................................18 13.1 506 LoopDetected...........................................17Detected...........................................18 13.2 507 Loop Forbidden..........................................20 13.3 508 Cross-Server Binding Forbidden..........................20 14Properties..................................................17Headers.....................................................20 14.1bindings Property...........................................17All-Bindings Request Header.................................20 14.2 Loop Header.................................................20 15XML Elements................................................17Properties..................................................20 15.1 bindings Property...........................................20 15.2 guid Property...............................................21 16 XML Elements................................................21 16.1 segment XMLElement.........................................17 16Element.........................................21 17 CapabilityDiscovery........................................17 16.1Discovery........................................21 17.1 Example: Discovery of Support forBindings..................18 17Bindings..................21 18 SecurityConsiderations.....................................18 17.1Considerations.....................................22 18.1 PrivacyConcerns............................................18 17.2Concerns............................................22 18.2 RedirectLoops..............................................19 17.3Loops..............................................22 18.3 Bindings, and Denial ofService.............................19 17.4Service.............................22 18.4 Private Locations May BeRevealed...........................19 17.5Revealed...........................22 18.5 DAV:bindings and Denial ofService..........................19 18 Internationalization Considerations.........................19Service..........................23 19IANA Considerations.........................................20Internationalization Considerations.........................23 20Copyright...................................................20IANA Considerations.........................................23 21Intellectual Property.......................................20Copyright...................................................23 22Acknowledgements............................................20Intellectual Property.......................................23 23References..................................................20Acknowledgements............................................24 24Authors' Addresses..........................................21References..................................................24 25Appendices..................................................21 25.1Authors' Addresses..........................................24 26 Appendices..................................................25 26.1 Appendix 1: Extensions to the WebDAV Document TypeDefinition..................................................21Definition..................................................25 1 Notational Conventions Since this document describes a set of extensions to the WebDAV Distributed Authoring Protocol [WebDAV], itself an extension to the HTTP/1.1 protocol, the augmented BNF used here to describe protocol elements is exactly the same as described in Section 2.1 of [HTTP]. Since this augmented BNF uses the basic production rules provided in Section 2.2 of [HTTP], these rules apply to this document as well. 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]. 2 Introduction The simple collections that the WebDAV Distributed Authoring Protocolspecificationsupports are powerful enough to be widely useful. They provide for the hierarchical organization of resources, with mechanisms for creating and deleting collections, copying and moving them, locking them, adding members to them and removing members from them, and getting listings of their members. Delete, copy, move, list, and lock operations can be applied recursively, so that a client can operate on whole hierarchies with a single request. This specification is one of a family of three specifications that build on the infrastructure defined in [HTTP] and [WebDAV] to extend the capabilities of collections. The companionspecification [OC]specification, "WebDAV Ordered Collections Protocol"[OC], defines protocol extensions to support ordered collections. The present specification and the companionspecification [RR]specification, "WebDAV Redirect Reference Resources"[RR], define mechanisms for allowing the same resource to appear in multiple collections. This capability is useful for several reasons: Organizing resources into hierarchies places them into smaller groupings, known as collections, which are more easily browsed and manipulated than a flat namespace. 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. 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-û to conserve disk space, to respect copyright constraints, or to make any changes in the shared resources visible automatically. The companion specification [RR] defines redirect references, one mechanism for providing access to a single resource from multiple collections. A redirect reference is a resource in one collection whose purpose is to forward requests to another resource (its target), usually in a different collection. In this way, it provides access to the target resource from another collection. It redirects most requests to the target resource using the HTTP 302 (Moved Temporarily) status code, thereby providing a form of mediated access to the target resource. The BIND method defined here provides a different mechanism for allowing a single resource to appear in multiple collections.ItBIND lets clients associate a new URI with an existingresource. Thisresource, and this URI can then be used to submit requests to the resource. Since URIs in WebDAV are hierarchical, and correspond to a hierarchy of collections in resource space, the BIND 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. These two approaches to allowing clients to add a single resource to multiple collections have very different characteristics: A redirect reference is a resource, and so can have properties of its own. Such information as who created the reference, when, and why can be stored on the redirect reference resource. Since redirect references are implemented using HTTP 302 responses, it generally takes two round trips to submit a request to the intended resource. Servers are not required to enforce the integrity of redirect references. Redirect references work equally well for local resources and for resources that reside on a different server from the reference. By contrast, a BIND request does not create a new resource, but simply makes available a new URI for submitting requests to an existing resource. The new URI can be used like any other URIto submitwhen 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 clients create and the resources associated with them. Consequently, it is unlikely that servers will support BIND requests that cross server boundaries. The remainder of this specification is organized as follows. Section 3 defines terminology used in the rest of the specification, while Section 4 briefly overviews bindings. Section 5 specified the BIND method, used to create bindings. Sections 6 through 10 discuss the relationships between bindings and other HTTP and WebDAV methods. Sections 11 and 12 define mechanisms for tracking bindings. Sections 13 through 16 define the new status codes, headers, properties, and XML elements needed to support bindings. Section 17 discusses compliance and capability discovery. Security concerns, internationalization issues, and IANA considerations are described in Sections 18 through 20. The remaining sections provide other supporting information. 3 Terminology The terminology used here follows and extends that in the WebDAV Distributed Authoring Protocol specification [WebDAV]. Definitions of the terms resource, Uniform Resource Identifier (URI), and Uniform Resource Locator (URL) are provided in [URI]. 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 asthe ordered pair (U,R).(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 URL makes it possible to submit HTTP protocol requests to the resource using the URL. Path Segment Informally, the characters found between slashes ("/") in a URI. Formally, as defined in section 3.3 of [URI]. 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 segmentS relative to that collection,S, and a resource R, the binding can be thought of asthe ordered triple (C,S,R).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. The following figure can be used to illustrate how bindings create URI mappings. +-----------------------------+ | root collection | |-----------------------------| | bindings: | | | | Coll1 Coll2 Coll3 | | | | \ | +---|-------|--------\--------+ | | \ | | \ +-------------------+ +----------------------+ | collection C1 | | collection C2 | |-------------------| |----------------------| | bindings: | | bindings: | | | | | | foo bar | | foo | | | \ | | / | +--|------\---------+ +-/--------------------+ | \ / | \ / | \ / | \ / +--------------+ +---------------+ | resource R1 | | resource R2 | +--------------+ +---------------+ Figure1 The2 Since there are two bindings in the root collection, Coll1 and Coll2, to collection C1, the single binding(C1,foo,R1)C1:(foo -> R1) between foo and resource R1 in collection C1 createsthetwo URImappingsmappings, /Coll1/foo and/Coll2/foo/Coll2/foo, to resource R1. Each of these URI mappings can be used to submit requests to R1. The binding(C1,bar,R2)C1:(bar -> R2) between bar and resource R2 in collection C1 and the binding(C2,foo,R2)C2:(foo -> R2) between foo and resource R2 in collection C2 create altogether 3 URI mappings to resource R2: /Coll1/bar, /Coll2/bar, and /Coll3/foo. All 3 URI mappings can be used to submit requests to resource R2. Collection A resource that contains, as part of its state, a set of bindings that identify member resources. Internal Member URIThe URI element U of a URIInformally, the complete set of URLs by which a collectionÆs member is known. Formally, the URI element U of a URI mapping(U,R),(U => R), created by a binding that is contained in a collection. The following figure illustrates the relationship between bindings and internal member URIs in a collection: +-----------------------------+ | root collection | |-----------------------------| | internal member URIs: | | | | /Coll1/ | | /Coll2/ | | /Coll3/ | |-----------------------------| | bindings: | | | | Coll1 Coll2 Coll3 | | | | \ | +---|-------|--------\--------+ | | \ | | \ +----------------------+ +----------------------+ | collection C1 | | collection C2 | |----------------------| |----------------------| | internal member URIs:| | internal member URIs:| | | | | | /Coll1/foo | | /Coll3/foo | | /Coll2/foo | |----------------------| | /Coll1/bar | | bindings: | | /Coll2/bar | | | |----------------------| | foo | | bindings: | | / | | | +-/--------------------+ | foo bar | / | | \ | / +--|------\------------+ / | \ / | \ / | \ / | \ / +--------------+ +---------------+ | resource R1 | | resource R2 | +--------------+ +---------------+ Figure23 The URI elements of all URI mappings created by a collection's bindings are internal member URIs of the collection. However, for a given request, only the URIs from those URI mappings that incorporate the Request-URI are treated as internal member URIs. For example, in Figure23 above, if a PROPFIND request with "Depth: infinity" is submitted to collection C1 using the Request-URI /Coll1/, only the URI mappings starting with the Request-URI would be listed as internal member URIs. The response would include only /Coll1/ itself and the internal member URIs /Coll1/foo and /Coll1/bar. This is done to prevent large amounts of duplicate information from being returned for operations on collections. In [WebDAV], a collection is defined as containing a list of internal member URIs, where an internal member URI is the URI of the collection, plus a single path segment. This definition combines the two concepts of binding and URI mapping that are separated in this specification. As a result, this specification redefines a collection's state to be a set of bindings, and redefines an internal member URI to be the URI of a URI mapping derived from a binding. After this redefinition, an internal member URI can be used when reading [WebDAV] without loss of meaning. For purposes of interpretation, when [WebDAV] discusses a collection "containing" an internal member URI, this should be read as the collection containing a binding whose mapping to a URI creates an internal member URI, in this sense "containing" the internal member URI. The authors of this specification anticipate and recommend that future revisions of [WebDAV] perform a full reconciliation of terms between these two specifications. 3.1 Rationale for Distinguishing Bindings from URI Mappings Consider again collection C1 in Figure 3. If we had only the notion of URI mappings, we would be forced to say that C1's membership was defined by the list of internal member URIs. If these URIs identify the membership, and are part of the state of the collection, then the act of making the collection available via a new URI has the effect of changing the collectionÆs membership, hence changing the collectionÆs state. This is undesirable, since ideally a collectionÆs membership should remain the same, no matter what URIs can be used to access the collection. What is needed is a way to separate the final segment of a URI from the collectionÆs URI contribution. The notion of binding is introduced to separate the final segment of a URI from its parent collectionÆs contribution. This done, a collection can be defined as containing a set of bindings, thus permitting a new mapping to be defined to a collection without modifying its membership state. We introduce the concept of URI mapping to combine together the collectionÆs URI and a bindingÆs segment to create a full URI that can be used in protocol requests. Finally, the internal member URI, first defined in [WebDAV], is redefined here to maintain backward compatibility with that specification. 4 Overview of Bindings Bindings are part of the state of a collection. In general, there is a one-to-many correspondence between a collection's bindings and its internal member URIs, as illustrated in Figure23 above. The URI segment associated with a resource by one of a collection's bindings is also the final segment of one or more of the collection's internal member URIs. The final segment of each internal member URI identifies one of the bindings that is part of the collection'sstate, unless the internal member URI isstate. Bindings are notmappedunique toa resource. Even though a binding is just a relation between a path segment in a collection and a resource, a binding creates one or more URI mappings of a URI to a resource. For example, if the segment "foo.html" is being bound to a resource in a collection with URL "http://www.foo.net/A/", the binding creates a URI mapping of URL "http://www.foo.net/A/foo.html" to the HTML resource. If the parent collection is then bound to the segment "B", this creates two URI mappings, "http://www.foo.net/B/" to the collection resource, and "http://www.foo.net/B/foo.html" to the HTML resource. Both the collection and the HTML resource are now accessible via two URLs apiece. For a resource implemented by a computer, the relationship between a URI mapping and a resource is highlighted in Figure 1: URI 1 URI 2 ... URI N | | | | | | <------- URI Mappings | | | +---------------------+ | Resource R | +---------------------+ Figure 3 This resource can have multiple URIs mapped to it. Bindings are not unique to advanced collections, although the BIND method for explicitly creating bindingsadvanced collections, although the BIND method for explicitly creating bindings is introduced here. Existing methods that create resources, such as PUT, MOVE, COPY, and MKCOL, implicitly create bindings. There is no difference between implicitly created bindings and bindings created with BIND. The identity of a binding(C,S,R)C:(S -> R) is determined by the URI segment (in its collection) and the resource that the binding associates. If the resource goes out of existence (as a result of some out-of-band operation), the binding also goes out of existence. If the URI segment comes to be associated with a different resource, the original binding ceases to exist and another binding is created. Since a binding is a relation between a path segment in a collection and a resource, it would be very undesirable if one binding could be destroyed as a side effect of operating on the resource through a different binding. It is not acceptable for a MOVE through one binding tofail to updatedisrupt another binding, turning that binding into a dangling path segment. Nor is it acceptable for a server, after performing a DELETE through one binding, to reclaim the system resources associated with its resource while other bindings to the resource remain. Implementations MUSTact toensure the integrity of bindings. 5 BIND Method 5.1 Overview of BIND The BIND method creates a new binding between the resource identified by the Request-URI and the final segment of the Destination header (minus any trailing slash). This binding is added to the collection identified by the Destination header minus its trailing slash (if present) and final segment. The Destination header is defined in Section 9.3 of [WebDAV]. If a server cannot guarantee the binding behavior specified here, including the guarantee of the integrity of the binding, the BIND request MUST fail. Note: It is especially difficult to maintain the integrity ofcross-servercross- 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 move it without notifying another server that manages a binding to the resource. For example, if server A permits creation of a 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.Consequently, support forSince most servers will be forced to fail cross-serverbindings is OPTIONAL. 5BINDMethod 5.1 Overview of BIND The BIND method creates a new binding from the final segment of the Request-URI (minus any trailing slash) to the resource identified by the Destination header. This binding is addedrequests because they are unable to guarantee thecollection identified by the Request-URI minus its trailing slash (if present) and final segment. The Destination headerintegrity of cross-server bindings, status code 508 (Cross-server Binding Forbidden) is defined in Section9.3 of [WebDAV]. If a server cannot guarantee the binding behavior specified for GET (Section 10), DELETE (Section 6), and MOVE (Section 8), the BIND request MUST fail with a 501 (Not Implemented) status code.13.3. If theRequest-URI ends in a slash ("/") (i.e., the Request-URI identifies a collection), the resource identified by theDestination headerMUST be a collection resource, or the request fails with a 409 (Conflict) status code. This ensures that URIs ending in a slash are always bound to collections. If the Request-URIdoes not contain a path segment (i.e., it consists simply of a slash "/"), the BIND operation MUST fail and report a409 (Conflict)400 (Bad Request) status code. A binding consists of a (collection, segment, resource) triple, and the Destination header is required to specify the collection and segment of this triple. After successful processing of a BIND request, it MUST be possible for clients to use theRequest-URIURI in the Destination header to submit requests to the resource identified by theDestination header.Request-URI. By default, if theRequest-URIDestination header identifies an existing binding, the new binding replaces the existing binding. This default binding replacement behavior can be overridden using the Overwrite header defined in Section 9.6 of [WebDAV]. 5.2 Bindings to Collections BIND can create a binding to a collection resource. A collection accessed through such a binding behaves exactly as would a collection accessed through any other binding. Bindings to collections can result in loops, which servers MUST detect when processing "Depth: infinity" requests.When a loopIt isdetected,sometimes possible to complete an operation in spite of theserver MUST respond withpresence of a loop. However, the 506 (Loop Detected) status code(definedis defined in Section 13.1 for use in contexts where an operation is terminated because a loop was encountered. Some servers may wish to prevent loops from being created at all. These servers MAY fail BIND requests with the 507 (Loop Forbidden) status code defined in Section13.1).13.2. 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 butdoes not result in the creation of ano newbinding for each of these resources.bindings. For example, suppose a new binding COLLX is created for collection C1 in the figure below. It immediately becomes possible to access resource R1 using the URI /COLLX/x.gif and to access resource R2 using the URI /COLLX/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 associate a URI that is*relativerelative to thatcollection*collection with its target resource. No change to the bindings in Collection C1 is needed to make its children accessible using /COLLX/x.gif and /COLLX/y.jpg. +-------------------------+ | Root Collection | | (properties) | | bindings: | | coll1 COLLX | +-------------------------+ | / | / | / +------------------+ | Collection C1 | | (properties) | | bindings: | | x.gif y.jpg | +------------------+ | \ | \ | \ +-------------+ +-------------+ | Resource R1 | | Resource R2 | +-------------+ +-------------+ Figure46 5.3 URI Mappings Created by a BINDThe set of URI mappings created bySuppose asuccessfulBINDoperation MUST be determined as follows: 1. Start with an empty set of URLs, called U. 2. Take the Request-URI and remove path segments (and associated "/" characters)request causes a binding fromthe right until either (a)"Binding-Name" to resource R to be added to anon-WebDAV collection is found, or (b) the root, "/"collection, C. Then if C-MAP isreached (i.e., no characters afterthescheme and authority partsset of URI's that were mapped to C before theURL). This is the base URL B. 3. Add B, and all possible domain name variants of B (i.e., all other domain names which can be substitutedBIND request, then forthe domain nameeach URI "C-URI" inB, and still retrieveC-MAP, theresourceURI "C-URI/Binding-Name" is mapped toB), to URL set U. 4. Calculate the next path segment ofresource R following theRequest-URI, going from left to right, and call it S, whichBIND request. Note that if R isbounda collection, additional URI mappings are created toresource R. 5. For each memberthe descendents ofURL set U, called Um, remove Um, then for every possibleR. Also note that if a binding is made in collection C to C itself (or toR, createanew URLparent of C), an infinite number of mappings is introduced. 5.4 Example: URI Mappings Created byaddinga BIND For example, if a binding from "foo.html" to R is added to thebinding's path segmentcollection C, and if the following URI's are mapped toUm,C: http://www.fuzz.com/A/1 http://fuzz.com/A/one thenadd thisthe following newURLmappings toU. 6.R are introduced: http://www.fuzz.com/A/1/foo.html http://fuzz.com/A/one/foo.html Iftherea binding from "myself" to C isno further path segment,thenU has the complete set of URI mappings. Otherwise, go backadded tostep 4. 5.4 Example: GeneratingC, theSetfollowing infinite number ofURI Mappings Assume a server respondsadditional mappings totwo domain names, www.fuzz.com, and fuzz.com,C are introduced: http://www.fuzz.com/A/1/myself http://www.fuzz.com/A/1/myself/myself ... andhas a top level that is not WebDAV-aware, called A/. Below A/ is WebDAV-aware collection that is boundthe following infinite number of additional mappings toboth 1/ and one/. In collection one/ there is a resource called index.html. >> Request: BIND /A/1/info.html HTTP/1.1 Host: www.fuzz.com Destination: http://www.fuzz.com/A/one/index.html >> Response: HTTP/1.1 201 Created The set of all possible URI mappings to the resource identified by http://www.fuzz.com/A/one/index.html is calculated as follows: 1. U is empty. 2. The base URL, B, is http://www.fuzz.com/A/, since A/ is not WebDAV- aware. 3. Since there are two domain names for this server, the domain name variations of B are added to U, making U contain: http://www.fuzz.com/A/ and http://fuzz.com/A/. 4. (iteration 1) The next path segment of the Request-URI is 1/, which is bound to a collection resource, R. 5. (iteration 1) Since the collection resource R is bound to 1/ and one/, the value of U after the operation is: http://www.fuzz.com/A/1/, http://www.fuzz.com/A/one/, http://fuzz.com/A/1/, and http://fuzz.com/A/one/. 6. Go back to step 4, since there is one more path segment in the Request-URI. 4. (iteration 2) The next path segment of the Request-URI is info.html, which is bound to an HTML resource, R. 5. (iteration 2) Since the HTML resource is bound to info.html and index.html, the value of U after the operation is: http://www.fuzz.com/A/1/index.html, http://www.fuzz.com/A/1/info.html, http://www.fuzz.com/A/one/index.html, http://www.fuzz.com/A/one/info.html, http://fuzz.com/A/1/index.html, http://fuzz.com/A/1/info.html, http://fuzz.com/A/one/index.html, http://fuzz.com/A/one/info.html. 6. Since there are no further path segments in the Request-URI, U now has the complete set of URI mappings for the resource identified by the Destination header. 5.5R are introduced: http://www.fuzz.com/A/1/myself/foo.html http://www.fuzz.com/A/1/myself/myself/foo.html ... 5.5 BIND Status Codes 201 (Created): The binding was successfully created. 400 (Bad Request): The client set an invalid value for the Destinationheader. 409 (Conflict): Several conditions may produce this response. The URI in the Destinationheaderis not mapped to a resource. The request is attempting to create a binding in a collection that does not exist. The request is attempting to re-bind the top-level collection.or Request-URI. 412 (Precondition Failed): The Overwrite header is "F", and a binding already exists for therequest-URI.Destination header. 507 (Loop Forbidden): The server does not support bindings that create loops. 508 (Cross-Server Binding Forbidden): The server is unable to create the requested binding because it would bind a segment in a collection on one server to a resource on a different server. 5.6 Example: BIND >> Request: BIND/~whitehead/dav/spec08.txt/pub/i-d/draft-webdav-protocol-08.txt HTTP/1.1 Host: www.ics.uci.edu Destination:http://www.ics.uci.edu/pub/i-d/draft-webdav-protocol-08.txthttp://www.ics.uci.edu/~whitehead/dav/spec08.txt >> Response: HTTP/1.1 201 Created The server created a new binding, associating "spec08.txt" with the resource identified by the URL "http://www.ics.uci.edu/pub/i-d/draft- webdav-protocol-08.txt". Clients can now use theRequest-URI,URI in the Destination header, "http://www.ics.uci.edu/~whitehead/dav/spec08.txt", to submit requests to that resource. As part of this operation, the server added the binding "spec08.txt" to collection /~whitehead/dav/.5.7 Example: BIND Conflict >> Request: BIND /press/prlogo.gif HTTP/1.1 Host: www.softcorp.com Destination: http://www.softcorp.com/logos/ >> Response: HTTP/1.1 409 Conflict6 DELETE and Bindings Theclient requestedDELETE method was originally defined in [HTTP]. This section redefines the behavior of DELETE in terms of bindings, an abstraction not available when writing [HTTP]. [HTTP] states that "the DELETE method requests that the origin serverto create a binding between "prlogo.gif" anddelete the resource identified by theURL "http://www.softcorp.com/logos/". SinceRequest-URI." Because [HTTP] did not distinguish between bindings and resources, theDestination does end inintent of its definition of DELETE is unclear. The definition presented here is aslash, while the Request-URI does not, the server failedclarification of therequest, returning a 409 (Conflict) status code. 6 DELETE and Bindingsdefinition in [HTTP]. The DELETE method requests that the server remove the binding between the resource identified by the Request-URI and the binding name, the last path segment of the Request-URI. The binding MUST be removed from its parent collection, identified by the Request-URI minus its trailing slash (if present) and final segment. The All-Bindings header may be used with DELETE to request that the server remove all bindings to the resource identified by the Request-URI. Onceall bindings to the resourcea set of resources areremoved,unreachable by any URI mapping, the server MAY reclaim system resources associated withthe resource.those resources. If DELETE removes a binding to a resource, but there remainother bindingsURI mappings to that resource, the server MUST NOT reclaim system resources associated with the resource.Since DELETE as specified inAlthough [WebDAV] allows a DELETE to be a non-atomic operation, the DELETE operation defined here isnotatomic. In particular, a DELETE with anatomic operation, it may happen that partsAll-Bindings header MUST fail if any of thehierarchy underbindings to therequest-URIresource cannot be deleted. Inthis case, the response is as described in [WebDAV]. [HTTP] states that "theaddition, a DELETEmethod requests thaton a hierarchy of resources is simply theorigin server deleteremoval of a binding to theresourcecollection identified by theRequest-URI." Because [HTTP] did not distinguish between bindingsRequest-URI, andresources, the intent of its definition of DELETEso isunclear. We consider the definition presented here to beaclarification of the definition in [HTTP].single (and therefore atomic) operation. Section 8.6.1 of [WebDAV] states that during DELETE processing, a server "MUST remove any URI for the resource identified by the Request-URI from collections which contain it as a member." Servers that support bindings SHOULD NOT follow thisrequirement.requirement unless the All-Bindings header is included in the request. 7 COPY and Bindings As defined in Section 8.8 of [WebDAV], 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 Destinationheader (including trailing "/", if present),header, and the destination resource. The new binding is added to its parent collection, identified by the Destination header minus its trailing slash (if present) and final segment. As an example, suppose that a COPY 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 URIX. After successful completion of the COPY operation, resource R is duplicated to create resource R', and a new binding has been created which creates at least the URI mapping between URIX and the new resource (although other URI mappings may also have been created). URI 1 URI 2 URI 3 URIX | | | | | | | <---- URI Mappings ----> | | | | | +---------------------+ +------------------------+ | Resource R | | Resource R' | +---------------------+ +------------------------+ Figure57 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 [WebDAV] 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. 8 MOVE and Bindings The MOVE method has the effect of creating a new binding to a resource (at the Destination), and removing an existing binding (at the Request- URI). The name of the new binding is the last path segment of the Destination header, and the new binding is added to its parent collection, identified by the Destination header minus its trailing slash (if present) and final segment. 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 URIX. After successful completion of the MOVE operation, a new binding has been created which creates at least the URI mapping between URIX and resource R (although other URI mappings may also have been created). 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. >> Before Request: URI 1 URI 2 URI 3 | | | | | | <---- URI Mappings | | | +---------------------+ | Resource R | +---------------------+ >> After Request: URI 1 URI 2 URIX | | | | | | <---- URI Mappings | | | +---------------------+ | Resource R | +---------------------+ Figure6 Since MOVE as specified in8 Although [WebDAV]is not an atomicallows a MOVE on a collection to be a non-atomic operation,it may happen that parts of the hierarchy undertherequest-URI cannotMOVE operation defined here MUST bemoved. In this case,atomic. Even when theresponseRequest-URI identifies a collection, the MOVE operation involves only removing one binding to that collection and adding another. There are no operations on bindings to any of its children, so the case of MOVE on a collection is the same asdescribed in [WebDAV].the case of MOVE on a non-collection resource. Both are atomic. 8.1 Implementation Note In some situations, particularly when the destination is on a different server from the original resource, the server may implement MOVE by performing a COPY, performing some consistency maintenance on bindings and properties, and then performing a DELETE. In the end, all of the original bindings except the one corresponding to the Request-URI will be associated with the new resource. The binding corresponding to the URI in the Destination header will be associated with the new resource. And the original resource together with the binding corresponding to the Request-URI will have been deleted. This implementation isin accord with the definition of MOVE in [WebDAV], and islogically equivalent to the definition of MOVE given in Section 8 above. The consistency maintenance processing that is required for this implementation is as follows: The DAV:creationdate property of the new resource SHOULD have the same value as the DAV:creationdate property of the old resource. The DAV:getlastmodified property of the new resource SHOULD have the same value as the DAV:getlastmodified property of the old resource. All URIs that were bound to the original resource except for the Request-URI MUST be bound instead to the new resource. Consider again the case where a MOVE is issued to URI 3 for resource R (which is also mapped to URI 1 and URI 2), with the Destination header set to URIX. Unlike the previous example, in this implementation, after successful completion of the MOVE operation, resource R has been duplicated as resource R'. The original bindings corresponding to URI 1 and URI2 are now associated with R'. The binding corresponding to the Request-URI (URI 3) has been removed. And a new binding has been created which creates at least the URI mapping between URIX and resource R'. Note that the server may reclaim the storage associated with resource R once the MOVE operation has finished. >> Before Request: URI 1 URI 2 URI 3 | | | | | | <---- URI Mappings | | |+---------------------++---------------------+ | Resource R | +---------------------+ >> After Request: URI1 URI2 --------------------------------- URIX | | | ----------------------------------------- | | | | | +---------------------+ +------------------------+ | Resource R | | Resource R' | +---------------------+ +------------------------+ Figure 9 8.2 MOVE and Locks The MOVE semantics defined in Section 8 above implies lock behavior that is different from that specified in Section 7.7 of [WebDAV]. Section 7.7 of [WebDAV] states, "A successful MOVE request on a write locked resource MUST NOT move the write lock with the resource." However, the semantics of MOVE defined here say that MOVE does nothing but remove one binding to a resource and create another binding to the same resource. The resource itself is not modified. Its state after the MOVE should be as nearly as possible identical to its state before the MOVE. Therefore, if it was locked before the MOVE, it MUST be locked after the MOVE, and with the same lock token. If this requirement cannot be met, the MOVE MUST fail. Specifically, the following rules apply to MOVE and locks: 1. If there is a lock on the resource before the MOVE, and that lock is rooted at the resource (that is, it is not inherited from a parent collection), the resource MUST still have that same lock after the MOVE. (This conflicts with [WebDAV].) 2. If there is a lock on the resource at the destination URL before the MOVE, and that lock is rooted at the destination resource (that is, it is not inherited from a parent collection), that lock does not apply to the resource that is moved to that Destination after the MOVE. (This is consistent with [WebDAV].) 3. If the resource being moved inherits a lock from a parent collection, and the resource is moved out of the tree affected by that lock, the lock no longer applies to the resource after the MOVE. (This is consistent with [WebDAV].) 4. If the resource at the destination URL inherits a lock from a parent collection before the MOVE, the moved resource inherits that lock after the MOVE. (This is consistent with [WebDAV].) 5. If there is a lock on the resource before the MOVE, and that lock is rooted at the resource, and the resource at the destination URL inherits a lock from a parent collection before the MOVE, the MOVE MUST fail due to a conflict between rules 1 and 4. (This conflicts with [WebDAV].) 6. If a collection is MOVEd, and there are some locked resources in that collection, those resources MUST still have the same locks after the MOVE. (This conflicts with [WebDAV].) The results of applying these rules are as follows: +-------------------------------------------------------------------+ | Before MOVE | After MOVE | |---------------------------------------------| | | Source Resource S | Destination Resource D | | |-------------------------------------------------------------------- | no lock | no lock | no lock | |-------------------|-------------------------|---------------------| | no lock | lock rooted at D | no lock | |-------------------|-------------------------|---------------------| | no lock | inherited lock | D's inherited lock | | | | applies | |-------------------|-------------------------|---------------------| | lock rooted at S | no lock | S's lock applies | |-------------------|-------------------------|---------------------| | lock rooted at S | lock rooted at D | S's lock applies | |-------------------|-------------------------|---------------------| | lock rooted at S | inherited lock | MOVE fails | |-------------------|-------------------------|---------------------| | inherited lock | no lock |Resource Rno lock |+---------------------+ >> After Request: URI1 URI2 --------------------------------- URIX|-------------------|-------------------------|---------------------| | inherited lock | lock rooted at D |-----------------------------------------no lock | |-------------------|-------------------------|---------------------| | inherited lock | inherited lock | D's inherited lock |+---------------------+ +------------------------+|Resource R| |Resource R'applies |+---------------------+ +------------------------+ Figure 7+-------------------------------------------------------------------+ 9 LOCK and UNLOCK Bindings do notaffect the semantics of locks, as specified in [WebDAV]. Specifically,change the fundamental requirement on locks, stated in section 8.10.3 of [WebDAV], that "a LOCK request on a resource MUST NOT succeed if it can not be honored by all the URIs through which the resource isaccessible" still holds.accessible". The LOCK method locks the resource, and a lock is visible via all URIs mapped to that resource. Similarly, a successful UNLOCK issued via any URI mapping to a resource removes the lock from the resource, and this lock removal is visible via all URI mappings. When a resource is locked, the lock owner expects to be able to access the resource -- using the same Request-URI that he used to lock the resource -- for as long as he holds the lock. This would not be possible if another user could move or delete any of the collections corresponding to segments of the request-URI. Consequently, for the duration of a lock, it MUST NOT be possible for a principal other than the lock owner to make a locked resource inaccessible via the URI mapping used to lock the resource. Only the lock owner can move or delete any of the collections corresponding to segments of the Request-URI. This restriction does not prevent others from modifying those collections, by adding members to them, removing members from them, or changing their property values. For example, if a user locks /plants/herbs/rosemary.html, it is not possible for another user to move /plants/herbs/ to /plants/flowering/herbs/, or to completely delete /plants/herbs/, though it is possible this delete operation may succeed in deleting everything except for /plants/herbs/rosemary.html and /plants/herbs/. Note that this requirement is weaker than the one implied by [WebDAV]. Sections 8.9.6 and 8.9.2 of [WebDAV] together imply that all URI mappings to a locked resource must be protected. They forbid moving or deleting any collection that has a locked resource as a descendent. It is likely that in an environment where multiple URI mappings to a single resource are common, it will be prohibitively expensive to enforce this stronger constraint. 10 Bindings and Other Methods This section describes the interaction of bindings with those HTTP methods not yet explicitly discussed. The semantics of the methods GET, HEAD, PUT, POST and OPTIONS are specified in [HTTP]. The semantics of PROPFIND, PROPPATCH, and MKCOL are specified in [WebDAV]. Formost ofthese methods, no new complexities are introduced by allowing explicit creation of multiple bindings to the same resource.For the access operations (GET, HEAD, OPTIONS, and PROPFIND), it is simply the caseWhen applied to static resources (that is, resources thatno matter whichare not CGI scripts, Active Server Pages, etc.), they obey the following rule: o The method submitted through one URI mappingto a given resource is usedMUST produce the same results as theRequest-URI,same method, with theresponse is mediated by thatsameresource. The responses may, however, vary depending upon which Request-URI was used. For example,headers and entity body, submitted through any other URI mapping to theresponsesame resource. When applied to dynamic resources, it is not possible to state any such rule. For any method, aGET requestdynamic resource maycontainbe sensitive to theRequest-URI in its entity. The same is true for POST. No matter whichURI mapping used toa givenaccess it. The resourceismay produce different results depending upon which URI mapping was usedasto submit theRequest-URI,request. Nevertheless, servers MAY allow new bindings to dynamic resources to be created using BIND. 11 Determining Whether Two Bindings Are to the Same Resource It is useful to have some way of determining whether two bindings are to theresponse is mediated by thatsame resource.The changes made on the serverTwo different resources might have identical contents and identical values for theresponses may, however, vary depending upon which Request-URI was used. Ifproperties defined in [WebDAV]. Although theRequest-URI of a PUT identifiesDAV:bindings property defined in Section 15.1 provides this information, it is anexisting resource, thenoptional property. The REQUIRED DAV:guid property defined in Section 15.2 is aPUT via one URI mapping to thisresource identifier, which MUSTproducebe unique across all resources for all time. If thesame result as a PUT withvalues of DAV:guid returned by PROPFIND requests through two bindings are identical, thesame headers and request entity body via any other URI mappingclient can be assured that the two bindings are to the same resource. Thechange made by a PUT via one URI mappingDAV:guid property is created, and its value assigned, when the resource is created. The value of DAV:guid MUSTaffectNOT be changed. Even after the resource is no longer accessible through any URI, thatgenerates the GET response for all URI mappingsvalue MUST NOT be reassigned tothe same resource. A PROPPATCH through oneanother resource's DAV:guid property. 11.1 davresourceid URImapping toScheme The value of DAV:guid is aresource MUST produceURI and may use any URI scheme that guarantees thesame changes to its properties asuniqueness of thesame PROPPATCH request through a differentvalue across all resources for all time. The davresourceid URImapping to the same resource. As specified in [WebDAV], MKCOL cannot overwritescheme defined here is anexisting resource. MKCOL through any URI mapping toexample of anexisting resource must fail.acceptable URI scheme. Thesemanticsdavresourceid URI scheme requires the use ofMKREF are specifiedthe Universal Unique Identifier (UUID) mechanism, as described inSection nn[ISO-11578]. Davresourceid generators may choose between two methods of[RR]. A MKREF through one URI mapping tocreating the identifiers. They can either generate aresourcenew UUID for every davresourceid they create or they can create a single UUID and then add extension characters. If the second method is selected, then the program generating the extensions MUSTproduceguarantee that the sameresult as a MKREFextension will never be used twice with thesame headers through any other URI mapping to the same resource. By default, it overwritesassociated UUID. DAVResourceID-URI = "davresourceid:" UUID [Extension] ; The UUID production is theresource withstring representation of anew redirect reference. The semanticsUUID, as defined in [ISO- 11578]. Note that white space (LWS) is not allowed between elements ofORDERPATCH are specifiedthis production. Extension = path ; path is defined in Sectionnn3.3 of[OC]. An ORDERPATCH through one URI mapping to a collection MUST produce the same changes to its ordering as the same ORDERPATCH request through any other URI mapping to the same collection. 11[URI]. 12 Discovering the Bindings to a Resource An OPTIONAL DAV:bindings property on a resource provides a list of the bindings that associate URI segments with that resource. If the DAV:bindings property exists on a given resource, it MUST provide a complete list of all bindings to that resource. By retrieving this property, a client can discover the bindings that point to the resource and the collections that contain bindings to the resource. As for all DAV: properties, this specification is silent as to how the DAV:bindings property is implemented on the server. Rationale: A number of scenarios require clients to navigate from a resource to the bindings that point to it, and to the collections that contain those bindings. This capability is particularly important for Document Management Systems. Their clients may need to determine, for any object in the DMS, what collections contain bindings to that object. This information can be used for upward navigation through a hierarchy or todiscover related documents in other collections. Risks: When deciding whetherdiscover related documents in other collections. Risks: When deciding whether to support the DAV:bindings property, server implementers / administrators should balance the benefits it provides against the cost of maintaining the property and the security risks enumerated in Sections 18.4 and 18.5. 13 Status Codes 13.1 506 Loop Detected The 506 (Loop Detected) status code indicates that the server terminated an operation because it encountered an infinite loop while processing a request with "Depth: infinity". When this status code is the top-level status code for the operation, it indicates that the entire operation failed. In this case, the Loop header can be used in the response to identify the URI that caused the failure. When this status code occurs inside a multistatus response, it indicates only that a loop is being terminated, but does not indicate failure of the operation as a whole. For example, consider a PROPFIND request on the following collection: Coll-1 (bound to collection C) Foo (bound tosupport the DAV:bindings property,resource R) Bar (bound to collection C) >> Request: PROPFIND /Coll-1/ HTTP/1.1 Host: www.somehost.com Depth: infinity Content-Type: text/xml; charset="utf-8" Content-Length: xxx <?xml version="1.0" encoding="utf-8" ?> <D:propfind xmlns:D="DAV:"> <D:prop> <D:displayname/> </D:prop> </D:propfind> >> Response: HTTP/1.1 207 Multi-Status Content-Type: text/xml; charset="utf-8" Content-Length: xxx <?xml version="1.0" encoding="utf-8" ?> <D:multistatus xmlns:D="DAV:"> <D:response> <D:href>http://www.somehost.com/Coll-1/</D:href> <D:propstat> <D:prop> <D:displayname>Loop Demo</D:displayname> </D:prop> <D:status>HTTP/1.1 200 OK</D:status> </D:propstat> </D:response> <D:response> <D:href>http://www.somehost.com/Coll-1/Foo</D:href> <D:propstat> <D:prop> <D:displayname>Bird Inventory</D:displayname> </D:prop> <D:status>HTTP/1.1 200 OK</D:status> </D:propstat> </D:response> <D:response> <D:href>http://www.somehost.com/Coll-1/Bar</D:href> <D:propstat> <D:prop> <D:displayname/> </D:prop> <D:status>HTTP/1.1 506 Loop Detected</D:status> </D:propstat> </D:response> </D:multistatus> 13.2 507 Loop Forbidden The serverimplementers / administrators should balance the benefits it provides against the costdoes not allow creation ofmaintaining the property andbindings that create loops. 13.3 508 Cross-Server Binding Forbidden The server is unable to create thesecurity risks enumeratedrequested binding because it would bind a segment inSections 17.4 and 17.5. 12a collection on one server to a resource on a different server. 14 Headers12.114.1 All-Bindings Request Header All-Bindings = "All-Bindings" ":" The All-Bindings request header may be used with DELETE requests to instruct the server to remove all bindings to the resource identified by the Request-URI.13 Status Codes 13.1 50614.2 LoopDetectedHeader Loop = "Loop" ":" Coded-URL The Loop header is used in 506 (Loop Detected)status code indicatesresponses to identify the URI that caused theserver detected an infinite loop while processing a request with "Depth: infinity". 14operation to fail. Note that the Coded-URL production is defined in Section 9.4 of [WebDAV]. 15 Properties14.115.1 bindings Property Name: bindings Namespace: DAV: Purpose: Enables clients to discover, for any resource, what bindings point to it and what collections contain those bindings. This is an optional property. Ifpresent,present on a given resource, it is a read-only property, maintained by theserver.server, and contains a complete list of all bindings to that resource. Value: List of href / segment pairs for all of the bindings that associate URI segments with the resource. The href is an absolute URI for one URI mapping of the collection containing the binding. Since there may be multiple URI mappings for this collection, it is necessary to select one (preferably the URI mapping contained in the Request-URI of the BIND request) for use in the DAV:bindings property. The segment is the URI segment that identifies the binding within that collection. <!ELEMENT bindings ((href, segment)*)>1515.2 guid Property Name: guid Namespace: DAV: Purpose: Enables clients to determine whether two bindings are for the same resource. Value: URI that is guaranteed unique across all resources for all time. It may be of the davresourceid URI scheme defined in Section 12.1 or any other URI scheme that guarantees this uniqueness. <!ELEMENT guid (href)> 16 XML Elements15.116.1 segment XML Element Name: segment Namespace: DAV: Purpose: The segment that names a binding, used in the DAV:bindings property. Value: segment ; as defined in section 3.3 of [URI]. <!ELEMENT segment (#PCDATA)>1617 Capability Discovery Sections 9.1 and 15 of [WebDAV] describe the use of compliance classes with the DAV header in responses to OPTIONS, to indicate which parts of the Web Distributed Authoring protocols the resource supports. This specification defines an OPTIONAL extension to [WebDAV]. It defines a new compliance class, called bindings, for use with the DAV header in responses to OPTIONS requests. If a resource does support bindings, its response to an OPTIONS request MUST indicate that it does, by listing the new BIND method as one it supports, and by listing the new bindings compliance class in the DAV header. When responding to an OPTIONS request, any type of resource can include bindings in the value of the DAV header. Doing so indicates that the server permits a binding at the request URI.16.117.1 Example: Discovery of Support for Bindings >> Request: OPTIONS /somecollection/someresource HTTP/1.1 HOST: somehost.org >> Response: HTTP/1.1 200 OK Date: Tue, 20 Jan 1998 20:52:29 GMT Connection: close Accept-Ranges: none Allow: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, BIND Public: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, BIND, MKREF, ORDERPATCH DAV: 1, 2, bindings The DAV header in the response indicates that the resource /somecollection/someresource is level 1 and level 2 compliant, as defined in [WebDAV]. In addition, /somecollection/someresource supports bindings. The Allow header indicates that BIND requests can be submitted to /somecollection/someresource. The Public header shows that other Request-URIs on the server support additional methods.1718 Security Considerations This section is provided to make WebDAV applications aware of the security implications of this protocol. All of the security considerations of HTTP/1.1 and the WebDAV Distributed Authoring Protocol specification 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.17.118.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.17.218.2 Redirect Loops Although redirect 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".17.318.3 Bindings, and Denial of Service Denial of service attacks were already possible by posting URLs 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.17.418.4 Private Locations May Be Revealed If the DAV:bindings 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:bindings property on the resource. Moving a binding may reveal its new location to anyone with access to DAV:bindings on its resource.17.518.5 DAV:bindings and Denial of Service If the server maintains the DAV:bindings 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.1819 Internationalization Considerations This specification follows the practices of [WebDAV] in encoding all human-readable content using XML [XML] and in the treatment of names. Consequently, this specification complies with the IETF Character Set Policy [Alvestrand]. WebDAV applications MUST support the character set tagging, character set encoding, and the language tagging functionality of the XML specification. This constraint ensures that the human-readable content of this specification complies with [Alvestrand]. As in [WebDAV}, names in this specification fall into three categories: names of protocol elements such as methods and headers, names of XML elements, and names of properties. Naming of protocol elements follows the precedent of HTTP, using English names encoded in USASCII for methods and headers. The names of XML elements used in this specification are English names encoded in UTF-8. For error reporting, [WebDAV] follows the convention of HTTP/1.1 status codes, including with each status code a short, English description of the code (e.g., 423 Locked). Internationalized applications will ignore this message, and display an appropriate message in the user's language and character set. For rationales for these decisions and advice for application implementors, see [WebDAV].1920 IANA Considerations This document uses the namespaces defined by [WebDAV] for properties and XML elements. All other IANA considerations mentioned in [WebDAV] also apply to this document.20In addition, this document defines new HTTP/1.1 status codes 506, 507, and 508 in Section 13. 21 Copyright To be supplied by the RFC Editor.2122 Intellectual Property To be supplied by the RFC Editor.2223 Acknowledgements This draft has benefited from thoughtful discussion by Jim Amsden, Steve Carter, Ken Coar, Ellis Cohen, Dan Connolly, Bruce Cragun, Spencer Dawkins, Mark Day, Rajiv Dulepet, David Durand, Roy Fielding, Yaron Goland, Fred Hitt, Alex Hopmann, Marcus Jager, Chris Kaler, Manoj Kasichainula, Rohit Khare, Daniel LaLiberte, Steve Martin, Larry Masinter, Jeff McAffer, Surendra Koduru Reddy, Max Rible, Sam Ruby, Bradley Sergeant, Nick Shelness, John Stracke, John Tigue, John Turner, Kevin Wiggen, and others.2324 References [URI] T. Berners-Lee, R. Fielding, L. Masinter, "Uniform Resource Identifiers (URI): Generic Syntax." RFC 2396. MIT/LCS, U.C. Irvine, Xerox. August, 1998. [RFC2119] S. Bradner, "Key words for use in RFCs to Indicate Requirement Levels." RFC 2119, BCP 14. Harvard University. March, 1997. [XML] T. Bray, J. Paoli, C.M. Sperberg-McQueen, "Extensible Markup Language (XML)." World Wide Web Consortium Recommendation REC-xml- 19980210. http://www.w3.org/TR/1998/REC-xml-19980210. [HTTP] R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L. Masinter, P. Leach, T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1." RFC 2616. UC Irvine, Compaq, W3C, Xerox, Microsoft. June, 1999. [WebDAV] Y. Y. Goland, E. J. Whitehead, Jr., A. Faizi, S. R. Carter, D. Jensen, "HTTP Extensions for Distributed Authoring - WebDAV." RFC 2518. Microsoft, U.C. Irvine, Netscape, Novell. February, 1999. [ISO-11578] ISO (International Organization for Standardization), ISO/IEC 11578:1996. "Information technology - Open Systems Interconnection - Remote Procedure Call (RPC)." [OC] J. Slein, E.J. Whitehead Jr., J. Davis, G. Clemm, C. Fay, J. Crawford, T. Chihaya, "WebDAV Ordered Collections." Internet Draft (work in progress) draft-ietf-webdav-ordering-protocol-00. Xerox, UC Irvine, CourseNet, Rational, FileNet, IBM, DataChannel. August, 1999. [RR] J. Slein, E.J. Whitehead Jr., J. Davis, G. Clemm, C. Fay, J. Crawford, T. Chihaya, "WebDAV Redirect References." Internet Draft (work in progress) draft-ietf-webdav-redirectref-protocol-00. Xerox, UC Irvine, CourseNet, Rational, FileNet, IBM, DataChannel. August, 1999.2425 Authors' Addresses J. Slein Xerox Corporation 800 Phillips Road, 105-50C Webster, NY 14580 Email: jslein@crt.xerox.com E. J. Whitehead, Jr. Dept. of Information and Computer Science University of California, Irvine Irvine, CA 92697-3425 Email: ejw@ics.uci.edu J. Davis CourseNet Systems 170 Capp Street San Francisco, CA 94110 Email: jrd3@alum.mit.edu G. Clemm Rational Software Corporation 20 Maguire Road Lexington, MA 02173-3104 Email: gclemm@rational.com C. Fay FileNet Corporation 3565 Harbor Boulevard Costa Mesa, CA 92626-1420 Email: cfay@filenet.com J. Crawford IBM Email: ccjason@us.ibm.com T. Chihaya DataChannel, Inc. 155 108th Ave. N.E., Suite 400 Bellevue, WA 98004 Email: Tyson@DataChannel.com2526 Appendices25.126.1 Appendix 1: Extensions to the WebDAV Document Type Definition <!--============= XML Elements from Section916 ================--> <!ELEMENT segment (#PCDATA)> <!--============= Property Elements from Section7 ==================-->13 ==================-- > <!ELEMENT bindings ((href, segment)*)> <!ELEMENT guid (href)> ExpiresFebruary 20,April 15, 2000