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 :
Accept-Language: fr; q=1.0, en; q=0.5
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 :
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
La négociation de la langue et du type de média peuvent se combiner.
Voir aussi
Liens externes
- RFC 2616 – Hypertext Transfer Protocol—HTTP/1.1 – Section 12 - Content negociation
- RFC 2295 – Transparent Content Negotiation in HTTP (traduction automatique en fra).
- Apache Négociation de contenu (v2.4.)
- Content negotiation techniques to serve XHTML as
text/html
andapplication/xhtml+xml
, W3C. - Négociation de contenu en HTTP, Stéphane Bortzmeyer, 2007
- Quand faut-il utiliser la négociation de langue ?, W3C, 2004 (2006).
Références
- Cet article en français est basé en partie sur cette page, dont les droits sont détenus par la fondation Apache mais fourni sous une licence libre.
- Portail de l’informatique
- Portail des télécommunications