PROPFIND vs. Accept: vs. variants
Wim Lewis <[email protected]> Wed, 20 Apr 2011 14:07:01 -0700
| Newsgroups | gmane.ietf.webdav |
|---|---|
| Message-ID | <[email protected]> |
I've encountered some behavior that surprised me from Apache's mod_dav = and I'm trying to figure out what the correct behavior is. Specifically, = what is the interpretation of the Accept: header sent with a PROPFIND = (or other DAV request other than GET)? I have a server with mod_dav and MultiViews enabled, and files foo.txt = and foo.png. As a result of this, Apache presents a resource at 'foo', = whose content and content-type vary depending on the Accept: header sent = in the GET request. This is as expected and as desired. If I do a PROPFIND on that resource, I get information about either the = txt or the png variant, depending on the Accept header sent in the = PROPFIND request. If I supply 'Accept: application/xml', then the = PROPFIND fails entirely with HTTP status 406. So clearly Apache is using = the Accept: header to select the variant on which to run the PROPFIND. = This is unexpected (to me), but makes a certain amount of sense. (The = <href> in the PROPFIND result always returns the url with the = appropriate extension --- the canonical URL for the file that supplied = that variant.) I had thought, however, that PROPFIND requests should include 'Accept: = application/xml', because that is the content-type of the result body I = want from the PROPFIND. RFC2616 describes Accept (and Accept-Charset = etc) as being "used to specify certain media types which are acceptable = for the response".=20 So, my question is: what is the meaning of Accept: in a PROPFIND = request? RFC2616 implies that a PROPFIND's Accept: header, if present, = should be application/xml, and in Apache's case, this works for = non-varying resources, even ones that aren't XML. On the other hand, = Apache is using it to select the variant to which to apply the = operation, regardless of the media type which will appear in the = response. Apache's behavior seems more *useful*, since it allows me to = discover canonical URLs for a varying resource. A related question, in the context of rfc4918 section 5, is how variant = resources are modeled in terms of segment-to-resource mapping. My = initial understanding was that the 'foo' path segment mapped to a single = resource, whose content and properties varied based on content = negotiation. The fact that the resource didn't correspond to a = particular disk file was an implementation detail and unimportant. The other interpretation is that the 'foo' segment maps to different = resources depending on content negotiation. This seems to be the = approach that Apache is taking, since in each case the PROPFIND response = indicates the more-canonical URL for the resource whose properties are = returned. rfc4918 states "it is illegal to have the same path segment = mapped to more than one resource", but it is only mapped to one resource = during any given request, so perhaps that is OK.