Comprendre l’en-tête HTTP Accept
Idée aujourd’hui assez démocratisée, je cherchais à une époque le moyen de servir le même contenu en deux formats différents, et ceci à la demande du client. Colin Brigato m’a alors indiqué qu’il existe justement une en-tête HTTP pour signifier au serveur le format désiré pour la ressource demandée : Accept.
L’en-tête HTTP Accept n’est en fait qu’une liste de types MIME séparés par des virgules et dotées de deux systèmes de classement permettant de déterminer la précédence que doivent avoir les types les uns par rapport aux autres. Ceci de façon à ce qu’en cas d’absence d’un type demandé sur le serveur, celui-ci puisse déterminer un autre type acceptable par le client en suivant son ordre de préférence ou lui renvoyer une erreur HTTP 406 (requête inacceptable) le cas échéant.
Ces deux systèmes de classements sont :
- La qualité de la ressource, indiquée en ajoutant à un type MIME «
;q=» suivi d’une valeur flotante comprise entre 0 et 1. - La spécificité de type, puisque l’utilisation d’une astérisque est autorisée pour remplacer le sous-type ou même le type et le sous-type (tel que «
*/*»).
Et puisque certains ronflent déjà à en baver, illustrons :
text/xml, text/plain; q=0.8, text/*; q=0.8, text/html, text/xml; level=1
En appliquant les deux classements précédemments cités on obtient donc le classement suivant :
text/xml; level=1, qualité de 1 par défaut et plus spécifique que le premiertext/xml, pourtant en début de chaîne.text/xml, qualité de 1 par défaut, moins spécifique quetext/xml; level=1mais déclaré avanttext/html.text/html, qualité de 1 par défaut et est déclaré après les autres types de même qualité.text/plain; q=0.8, qualité de 0.8.text/*; q=0.8, qualité de 0.8 mais moins spécifique quetext/plain; q=0.8.
Liens externes
- La section 14 de la RFC 2616 définissant le protocole HTTP 1.1.