Re: Value of content negotiation? [was RE: content negotiation anti-principle]

On Thursday 09 January 2003 12:32 am, Mark Nottingham wrote:
> Conneg (to be precise, server-driven negotiation, which seems to be most
> relevent to this discussion) is IMO currently hobbled by two things;
>
> * browser implementations - don't want to spew out all of the media types
> they support, and they misuse the wildcard (as noted in CUAP [1]).
>
> * server implementations - generally make it difficult to configure conneg
> (e.g., expressing priority order, applying to multiple resources, etc.)

Agreed.

> Like Simon, I'm inclined to treat it as a pillar of the Web architecture,
> not something to be swept under the carpet.

As I noted earlier, I have been a long-term champion of negotiation... but 
from my experience with hundreds of customers, with some very significant web 
sites, I don't see the widespread use of content negotiation you see. In all 
honesty, in all the customers I've ever dealt with, I can remember very few 
that used content negotiation. Even those that wanted roughly the same kind 
of functionality (URI's with multiple language representations, for example) 
used profiles to drive dynamic composition rather than content negotiation, 
because in many cases the representations may be slightly different based on 
the profile (i.e. the profile may disallow certain content).

The main failure within the current world of content negotiation is that you 
have no way to say "I want a specific representation of a resource" from the 
application level. For example, if I do this:

   <a href="foo.html">foo.html</a>

there is an implicit requirement that the representation returned be in 
text/html (and of course, entities in XML are even more fragile), but I have 
no way of *forcing* that at the application level. So despite all the 
possible (if underused) benefits of negotiation in terms of robustness, it 
also engenders a degree of fragility.

Now there are two ways to deal with the problem: really look to see if content 
negotiation is *really* alive and well (my experience is that it is not used 
widely, your mileage may vary), and if not, to toss it. The other way is to 
bridge the gap between the application and protocol such that the application 
has *finer* control over the returned representations.

About the closest thing I can think of to the latter is the "charset" 
attribute on the <A> element in HTML. Though it's purpose is really somewhat 
different, it is used to specify metadata about the representation of the 
resource being linked to.

Received on Thursday, 9 January 2003 05:59:57 UTC