Re: PROPFIND vs. Accept: vs. variants

Werner DonnĂ© <[email protected]> Thu, 21 Apr 2011 15:20:05 +0200
Newsgroups gmane.ietf.webdav
Message-ID <[email protected]>
Hi Wim,

My understanding is that Accept is the same for a GET or a PROPFIND. It =
is just an indication of the client about the acceptable forms for the =
representation of a resource. The format for the response body of a =
PROPFIND is application/xml. It the client requests this in another =
format then either the server responds with a 406 or it transforms the =
data to the desired format if it supports it. I think this is allowed =
because RFC4918 says:

"All servers MUST support returning a response of content type text/xml =
or application/xml that contains a multistatus XML element that =
describes the results of the attempts to retrieve the various =
properties."

This doesn't preclude other representations of the data. A server could, =
for example, support also a JSON representation or an OPDS =
representation, etc.

Using Accept for the selection of a variant is possible for a GET, but =
then I think foo.txt and foo.png are the representations of two entities =
of the resource foo. As a consequence, the properties are always the =
same, which means Accept can't be used to select a variant for a =
PROPFIND. Properties are related to resources and are not affected by =
the Accept header.

Regarding the related question, I think that if "foo" corresponds to =
different resources depending on content negotiation, then this always =
implies a redirect to one of those resources.

Best regards,

Werner.

On 20 Apr 2011, at 23:07, Wim Lewis wrote:

> 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)?
>=20
> 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.
>=20
> 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.)
>=20
> 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
>=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.
>=20
>=20
>=20
> 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.
>=20
> 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.
>=20
>=20
>=20
>=20
>=20

--
http://www.pincette.biz/
Handling your documents with care, wherever you are.