Print

Print


Hi Ralph -

At Tue, 1 Jun 2010 15:17:02 -0400,
LeVan,Ralph wrote:
> A simple use case comes from OpenSearch and its use of URL
> templates. To enable the return of RSS as the response to an SRU
> query, we added the parameter "httpAccept=application/rss+xml" to
> the SRU URL in the OpenSearch template and coded for it in the SRU
> server. Had we had a filter in the request, the servlet's life would
> have been easier.
> 
> That seemed like a specific solution to what could be a
> generalizable problem.

There have been long discussions on the rest-discuss mailing list
about this issue. (See, e.g, [1].)

Frankly I think that it is wrong to think of your httpAccept param as
equivalent to an HTTP header.

There is a time for a URI that can use content-negotiation (the Accept
header, etc.) to get, e.g., PDF, HTML, or plain text. As an example:

  http://example.org/RFC1

And there is a time when we want to explicitly refer to a particular
resource that has only ONE type. For example, the canonical version of
an RFC:

  http://example.org/RFC1.txt

But these are different resources. If you want to be able to link to
search results that must be returned in RSS, a query parameter or file
extension is proper.

But this query param or file extension, in my opinion, is quite
different than HTTP content negotiation or the Accept header.

At Tue, 1 Jun 2010 15:36:23 -0400,
Joe Hourcle wrote:
> 
> On Tue, 1 Jun 2010, Erik Hetzner wrote:
> > I am having a hard time imagining the use case for this.
> >
> > Why should you allow a link to determine things like the User-Agent
> > header? HTTP headers are set by the client for a reason.
> 
> I can think of a few cases -- debugging is the most obvious, but possibly 
> also to work around cases where someone's browser is sending a header 
> that's screwing something up.  (which is basically debugging, as I'd have 
> the user try a few things, and then once I knew what was going wrong, I'd 
> fix it so we didn't have to have workarounds)

Not the solution I would prefer for debugging, but if it is not
exposed to the outside world, OK.
 
> But all of the cases that I can think of where it'd be useful, there's 
> already work arounds --
> 
>  	Cache-Control : add a random query string
>  	Accept (if using content negotiation) : add a file extension
>  	Accept-Language : add a language extension

Yes, with caveats above.

> > Furthermore, as somebody involved in web archiving, I would like to
> > ask you not to do this.
> >
> > It is already hard enough for us to tell that:
> 
> [trimmed]
> 
> You'll always have those problems when assuming that URL is a good 
> identifier.

I don’t assume, I know a URL is a good identifier. :)

> The only good solution would be for webservers to respond back with a sort 
> of 'preferred URI' with the response -- some do it via redirection, but 
> you're never going to get everyone to agree -- and in the example above 
> with the various 'Accept' headers, you have the question about what it is 
> that you're trying to identify (the general concept, the specific 
> translation, or the translation + packaging? ... and then we get into FRBR 
> territory)

As far as I know there are only 2 solutions, a 301 response and
Content-Location [2]. Either one works fine. This is not a contentious
issue, it is just one that a lot of web sites do not handle properly.

I’m not sure what FRBR has to do with it. I think the web architecture
documents have good, practical things to say about what is identified
by a URI.

best, Erik Hetzner

1. http://tech.groups.yahoo.com/group/rest-discuss/message/11508
2. http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.14