HTTP for HTML Authors, Part II - HTML with Style | 5
Up until now, you've been used to the fact that a certain path in your server always corresponds to the same file on your server's hard disk. As I've said before, this is often not the case; the first example of such a situation which we'll examine is server-driven content negotiation.
The term content negotiation means that there exists a system which can be used to select one of several alternative documents for a given request. In this case, server-driven content negotiation is such a system.
The purpose of content negotiation is to automatically select the correct document for a user based on his abilities, preferences and set-up. The most commonly used example of content negotiation is in selecting documents in different languages. As we saw before, a Web server can specify the language of a document via the Content-Language HTTP header. This is useful if the reader doesn't speak the language, but in the end is very similar in functionality to that dumb look on your face when confronted with a language you've never seen before.
Another useful HTTP header is the Accept-Language header. In contrast to Content-Language, this header is sent along by the browser along with a request (instead of being sent by the server along with a response) and indicates which languages the browser would rather receive. Most modern browsers (including the Big Two) allow users to specify their preferred languages, usually in order of preference. These are then sent to Web servers via the Accept-Language header. A typical Accept-Language header might look like this:
This header specifies that Danish is the preferred language, followed by British English, followed by other English variants. The q=0.8 bits are what are called quality ratings and merely specify the relative preference the user is expressing for each language; the details of how they work are beyond the scope of this tutorial.
A Web server, when confronted with such a header, is expected to look at the various alternatives it has on offer and select the one that can best satisfy the user's lack of linguistic skills. The precise mechanism through which this is accomplished varies from server to server, and once again is a matter of implementation. However, if you're going to offer a Web site in multiple languages, this is an excellent way to make sure the right people get the right version of your documents.
Content negotiation is not only done on the basis of language; the HTTP request headers Accept and Accept-Charset work in similar ways as Accept-Language, and offer means of selecting a version of the correct media type and character set (or encoding, in the case of HTML).
Produced by Stephanos Piperoglou
Created: January 24, 2001
Revised: February 27, 2001