Négociation de contenu
# Négociation de contenu

La négociation de contenu est un mécanisme du protocole HTTP qui permet de proposer une même ressource (identifiée par son URI) sous plusieurs formes différentes. Les variations permises concernent la langue de la ressource et son type MIME. Les clients HTTP peuvent ainsi choisir automatiquement la représentation la mieux adaptée à leurs capacités.

## Emplois

La sélection de la langue d’une page web par un navigateur constitue un emploi typique de ce mécanisme : parmi les langues dans lesquelles la page est disponible, le navigateur choisit en priorité la langue maternelle de l’internaute.

Un autre exemple classique est de proposer une image dans plusieurs formats, comme GIF et PNG ; ainsi un navigateur qui peut afficher les images PNG privilégiera ce format (car il offre une meilleure qualité graphique), tandis qu’un navigateur qui en est incapable peut toujours obtenir la version GIF.

Sans négociation de contenu, le serveur HTTP pourrait afficher une page d’index pour laisser l’utilisateur choisir le type de média qu’il souhaite. Le mécanisme de négociation de contenu rend ce genre de solutions inutiles en automatisant la sélection.

## Fonctionnement

Quand un client soumet une requête à un serveur, il informe celui-ci des types de média qu'il comprend et de ses préférences. Concrètement, le client envoie deux en-têtes HTTP. Le premier, Accept-Language, liste les langues reconnues par le client, pondérées par des taux d’acceptabilité. Le second en-tête, Accept, fonctionne de façon analogue pour la liste des types MIME compris par le navigateur. Le serveur répond avec la version de la ressource la mieux adaptée aux capacités communiquées par le client.

Il est ainsi possible de demander au serveur HTTP de fournir de préférence une ressource en français (poids de 1) ou, si cette langue n’est pas disponible, en anglais (poids de 0,5, ce qui est plus petit que 1). C’est l’effet de l’en-tête suivant :

De même, le client peut déclarer d’une part qu’il préfère le format HTML (poids de 1) à tout autre format textuel (poids de 0,8), d’autre part qu’il préfère les formats GIF et JPEG (à égalité, poids de 0,6) à tout autre format d’image (poids de 0,5), et enfin qu’il accepte n’importe quel type de média (poids de 0,1) en dernier recours :

La négociation de la langue et du type de média peuvent se combiner.

