Négociation de contenu
La Négociation de contenu est un mécanisme défini dans la spécification HTTP qui offre la possibilité de proposer pour une même URI, différentes versions d'un même document (ou plus généralement, une ressource). Les User-Agent peuvent ainsi choisir la version la mieux adaptée à leurs capacités. Une des utilisations classiques de ce mécanisme est de proposer une image aussi bien au format GIF que PNG. Ainsi un User-Agent qui ne peut pas afficher le format PNG peut toujours utiliser la version en GIF.
Pour résumer le fonctionnement de ce mécanisme, quand un Agent utilisateur User-Agent soumet une requête à un serveur, il informe celui-ci du type de média qu'il comprend en indiquant même un taux d'acceptabilité. Concrètement, l'agent utilisateur envoie un en-tête HTTP (Accept) avec les différents types MIME pris en charge. Alors, le serveur répond avec la version de la ressource la mieux adaptée aux capacités des navigateurs.
Ainsi, une resource peut-être disponible dans différentes représentations, par exemple en différentes langues ou avec différents types de media, ou une combinaison des deux. Une solution pour sélectionner le choix le plus approprié est de proposer à l'utilisateur une page index en le laisser choisir, par exemple la partie du site qui est dans sa langue. Mais il est souvent possible pour le serveur de choisir automatiquement la bonne réponse. Cela est possible parce que les navigateurs transmettent des données sur les représentations qu'ils préfèrent. Par exemple, un navigateur peut indiquer qu'il aimerait afficher l'information si possible en Français, sinon (2ème choix) en Anglais. Les navigateurs indiquent leurs préférences au niveau des en-têtes de la requête. Pour demander seulement des représentations/documents français, le navigateur devrait envoyer l'information suivante :
Accept-Language: fr
Notez que cette préférence sera appliquée seulement quand il y a un choix de représentations et que celles-ci varient par langues.
Comme exemple d'une requête plus complexe, ce navigateur a été configuré pour accepter le Français et l'Anglais, mais il préfère le Français, et accepte des types de média variés, préférant le HTML pour l'affichage plein texte ou pour d'autres types textuels, et préférant le GIF ou le JPEG pour d'autres types de médias, mais autorisant aussi n'importe quel type de média en dernier recours:
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
Voir aussi [modifier]
- Serveur HTTP : Apache HTTP Server, Internet Information Services, lighttpd, nginx, Sun Java System Web Server, Zeus Web Server, …
- Gestion des langues
Liens externes [modifier]
- 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/htmlandapplication/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 [modifier]
- 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.