Content negotiation

From Wikipedia, the free encyclopedia

Jump to: navigation, search
Persistence · Compression · SSL
ETag · Cookie · Referrer
Status codes
301 Moved permanently
302 Found
303 See Other
403 Forbidden
404 Not Found

Content negotiation is a mechanism defined in the HTTP specification that makes it possible to serve different versions of a document (or more generally, a resource) at the same URI, so that user agents can specify which version fit their capabilities the best. One of the most classical uses of this mechanism is to serve an image in GIF or PNG format, so that a browser that doesn't understand PNG (e.g. MS Internet Explorer) can still display the GIF version. To summarize how this works, when a user agent submits a request to a server, the user agent informs the server what media types the user agent understands along with indications of how well it understands them. More precisely, the user agent uses an Accept HTTP header that lists acceptable media types. The server is then able to supply the version of the resource that best fits the user agent's needs.

So, a resource may be available in several different representations. For example, it might be available in different languages or different media types, or a combination. One way of selecting the most appropriate choice is to give the user an index page, and let them select. However it is often possible for the server to choose automatically. This works because browsers can send as part of each request information about the representations they prefer. For example, a browser could indicate that it would like to see information in French, if possible, else English will do. Browsers indicate their preferences by headers in the request. To request only French representations, the browser would send

Accept-Language: fr

Note that this preference will only be applied when there is a choice of representations and they vary by language.

As an example of a more complex request, this browser has been configured to accept French and English, but prefer French, and to accept various media types, preferring HTML over plain text or other text types, and preferring GIF or JPEG over other media types, but also allowing any other media type as a last resort:

Accept-Language: fr; q=1.0, en; q=0.5
         Accept: text/html; q=1.0, text/*; q=0.8, image/gif; q=0.6, image/jpeg; q=0.6, image/*; q=0.5, */*; q=0.1

[edit] See also

[edit] External links

[edit] References

  • This article is based in part on this page, which is copyrighted by the Apache Foundation but released under a free license.
Personal tools