Subject: Re: Lock

From: [email-masked]
Date: Tue, 8 Feb 2000 21:41:45 GMT

Ok... But the real issue is if I can make sure that the Lock command tells me, 
if I'm trying to lock something that has been updated. There is nothing in the 
webdav spec. that specifies this behaviour, right? Can I even rely on that if I 
send the E-tag, that the server is supporting this behavour on a Lock command?  
( this maybe applies to some other commands to... )
If the resource is changed, what reply can I expect from the server?

/Rickard

> 
> I would like to voice *very* strong support for Greg's suggestion.  In
> the presence of versioning, date comparisons such as "Last-Modified"
> or "If-Unmodified-Since" do not provide you with reliable information
> about the accuracy of what you have in your cache.  In particular, if
> an older revision is made the default revision of a versioned
> resource, it will have an older date, but your cache should be updated
> with that older value.
> 
> So ETag values should be the only ones you use to verify that you are
> seeing the current value of a resource.
> 
> Cheers,
> Geoff
> 
>    Date: Tue, 8 Feb 2000 03:34:19 -0800 (PST)
>    From: Greg Stein <[email-masked]>
> 
>    On Tue, 8 Feb 2000, Rickard Falk wrote:
>    > I have another 'client side' related question.
>    > When I'm issuing a Lock command, can I include the 'If-Unmodified-Since' 
in
>    > the header ( http standard parameter...)?
>    > In our client a user can browse through allot of files, without having 
them
>    > locked. Then when he wants to edit the file, he then presses a lock 
button.
>    > But when he presses this button, the client must make sure that the file
>    > that he has read, is the latest one. Today I'm doing a Lock, then a Head
>    > command to se if the 'Last-Modified' parameter is changed since the Get. 
It
>    > would be much easier if I just could add the 'If-Unmodified-Since' in the
>    > Lock request.
> 
>    You should be able to use If-Unmodified-Since (mod_dav will check for it).
> 
>    Note that you could also use ETag values to check for changes. I think the
>    ETag is probably the Right Way to look for possible changes on the server.
> 
>    Cheers,
>    -g
> 
>    -- 
>    Greg Stein, http://www.lyra.org/
> 
>

---

From: Greg Stein <[email-masked]>
Date: Tue, 8 Feb 2000 19:00:00 -0800 (PST)

Let's assume that during your initial get, the server returns an ETag
header such as:

ETag: "abc"

When you lock the resource, you can send back something like:

If-Match: "abc"

If the document has changed, then the ETag should have changed and the
server will return 412 (Precondition Failed).

Alternatively, you can use WebDAV's If: header like so:

If: (["abc"])

You should also receive a 412 (Precondition Failed) in case the ETag no
longer matches.

And to be explicit: you *can* send the If: or If-*: headers with your LOCK
method. By definition, a WebDAV server MUST support the If: header. I
can't really determine whether an HTTP server MUST/MAY/SHOULD support the
If-Match: header... the language is awfully complex the HTTP spec :-)

Cheers,
-g

ps. fyi: for the mod_dav case, Apache handles If-Match: and providing the
ETag: header. mod_dav handles the If: header.