- From: Geoffrey M Clemm <geoffrey.clemm@us.ibm.com>
- Date: Sun, 3 Jul 2005 16:23:24 -0400
- To: " webdav" <w3c-dist-auth@w3.org>
- Message-ID: <OF5A19A839.D0EFEC7F-ON85257033.006FC98F-85257033.007001E9@us.ibm.com>
I agree with Julian that the Depth infinity section of redirectref should be redefined based on this implementation experience. Cheers, Geoff Julian wrote on 07/03/2005 02:08:31 PM: > > John Baumgarten wrote: > > > > All- > > > > After reviewing this draft, I have decided that the protocol is too > > complex for our needs with .Mac. In particular, the failure of locking > > methods that contain redirected resources would confuse our clients. > > Instead, we have decided to implement a simpler redirect capability via > > a custom property (not a WebDAV resource type) that is only activated > > when indicated by the client request. > > > > Given this decision, I will not be able to provide specific feedback on > > the draft. > > > > -Jake > > Jake, > > thanks for the feedback. > > As a general comment: it's really good to know why a given part of a > specification can't be easily implemented in a server. That's exactly > the kind of valuable feedback the working group needs to gather in WGLC > (or earlier :-). > > In this particular case, you have catched a part of the spec which is > indeed hard to implement (and in fact isn't by us!). > > In defining how redirect reference resources should interact with other > methods and WebDAV collections, the spec roughly follows this line of > reasoning: > > 1) HEAD and GET applied to a redirect resource by a standard client > should result in a 3xx status code (that's the whole point of having > those resources :-). > > 2) If this is true for GET and HEAD, it also should be true for other > methods. > > 3) Clients aware of REDIRECT should be able to override this behaviour > (so that they can for instance PROPFIND/PROPPATCH/DELETE a redirect). > This is accomplished through the use of the Apply-To-Redirect-Ref > request header (see > <http://greenbytes.de/tech/webdav/draft-ietf-webdav-redirectref- > protocol-12.html#header.apply-to-redirect-ref>). > > 4) RFC2518 dictates that by default a Depth: infinity request header > should work as if the request would have been applied to each member; > therefor REDIRECT requires these operations to result in a 207 > (Multistatus) if the collection contains redirects (and the > Apply-To-Redirect-Ref wasn't set to "T"). > > It turns out that 4) is extremly hard to implement on top of systems > that do not implement any specific treatment of redirects natively. > > For instance, an imaginary WebDAV server that maps file resources to > WebDAV resources and that implements redirects as symbolic links in the > filesystem would need to walk through the whole hierarchy to check for > redirects, before actually doing the appropriate system call for a > rename. This doesn't look practical. > > I assume that REDIRECT uses this approach for the sake of maximum > consistency with HTTP/1.1 (redirect status codes) and WebDAV (Depth > request header). However, there obviously is a tradeoff in terms of > implementability. We probably need to take a look at each method that > uses the Depth request header and decide what is reasonable. > > What you stumbled upon was LOCK. > > From RFC2518's definition of the Depth header > (<http://greenbytes.de/tech/webdav/rfc2518.html#HEADER_Depth>): > > "The Depth header is used with methods executed on resources which could > potentially have internal members to indicate whether the method is to > be applied only to the resource ("Depth: 0"), to the resource and its > immediate children, ("Depth: 1"), or the resource and all its progeny > ("Depth: infinity"). > > The Depth header is only supported if a method's definition explicitly > provides for such support. > > The following rules are the default behavior for any method that > supports the Depth header. A method may override these defaults by > defining different behavior in its definition." > > So by this definition, a LOCK request with Depth: Infinity means that > the request is to be applied to the resource identified by the > request-URI and - recursively - all its members. This is clearly *not* > what a deep lock does - it generates a *single* lock, not one for each > member. This lock indeed affects all members, but in a completely > different way from what would happen if one would apply the lock to each > resource separately. > > Funny enough, the definition of LOCK indeed clarifies what the Depth > header means > (<http://greenbytes.de/tech/webdav/rfc2518.html#rfc.section.8.10.4>) here: > > "The Depth header may be used with the LOCK method. Values other than 0 > or infinity MUST NOT be used with the Depth header on a LOCK method. All > resources that support the LOCK method MUST support the Depth header. > > A Depth header of value 0 means to just lock the resource specified by > the Request-URI. > > If the Depth header is set to infinity then the resource specified in > the Request-URI along with all its internal members, all the way down > the hierarchy, are to be locked. A successful result MUST return a > single lock token which represents all the resources that have been > locked. If an UNLOCK is successfully executed on this token, all > associated resources are unlocked. If the lock cannot be granted to all > resources, a 409 (Conflict) status code MUST be returned with a response > entity body containing a multistatus XML element describing which > resource(s) prevented the lock from being granted. Hence, partial > success is not an option. Either the entire hierarchy is locked or no > resources are locked." > > > By that definition, it looks entirely reasonable that the presence of a > a redirect shouldn't affect the result of a deep lock request at all (if > there's a redirect in scope, the redirect itself should be locked as well). > > My proposal is that we go through the list of methods that use the Depth > header, and define the expected outcome separately (rewriting the whole > section of > <http://greenbytes.de/tech/webdav/draft-ietf-webdav-redirectref- > protocol-12.html#rfc.section.8>). > That may take some time, but will surely be worth the effort if more > servers will actually be able to implement the spec. > > > Feedback appreciated, > > Julian >
Received on Sunday, 3 July 2005 20:23:33 UTC