httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Chris Darroch <>
Subject Re: thoughts on ETags and mod_dav
Date Fri, 12 Oct 2007 04:25:29 GMT
Hi --

> 1) Per #38034, it appears that ap_meets_conditions() treats "*" incorrectly.

   More precisely, I should say that ap_meets_conditions() isn't designed
to support the NULL resources of RFC 2518 (WebDAV).  I'm certainly no
expert on these issues, so guidance is welcome.

   RFC 2616 section 14.24 (and 14.26 is similar) says, "If the request
would, without the If-Match header field, result in anything other than a
2xx or 412 status, then the If-Match header MUST be ignored."  Thus in
the typical case, if a resource doesn't exist, 404 should be returned,
so ap_meets_conditions() doesn't need to handle this case at all.

   RFC 2518 introduces lock-null resources for use with certain
methods such as LOCK, PUT, and UNLOCK.  (RFC 4918, it seems, deprecates
lock-null resources in favour of "locked empty resources".)  For these
particular methods and resources, other language from RFC 2616's
section 14.24 (again, 14.26 is similar) comes into play, specifically,
"If none of the entity tags match, or if '*' is given and no current entity
exists, the server MUST NOT perform the requested method, and MUST return a
412 (Precondition Failed) response."

   Personally, I'd be inclined to try to make ap_meets_conditions()
handle support these different situations in as generic a way as
possible (in case other non-mod_dav DAV modules or other HTTP extensions
need to use the same logic), but that may be difficult to do without
introducing compatibility problems and/or contorted code.

   Another option would be the one described by Paritosh Shah:

> For this, we can create a new dav_meets_conditions() which
> calls ap_meets_conditions() and also handles those other cases.

   Thoughts, corrections, etc.?


GPG Key ID: 366A375B
GPG Key Fingerprint: 485E 5041 17E1 E2BB C263  E4DE C8E3 FA36 366A 375B

View raw message