Qu'est-ce que q = 0,5 dans les en-têtes HTTP Accept *?

194
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7

Que signifient ces «q =% f»?

kolypto
la source

Réponses:

251

C'est ce qu'on appelle un facteur de qualité relative . Il spécifie la langue que l'utilisateur préférerait, sur une échelle de 0 à 1, comme le montre la spécification HTTP / 1.1, §14.4 :

Chaque plage de langues PEUT recevoir une valeur de qualité associée qui représente une estimation de la préférence de l'utilisateur pour les langues spécifiées par cette plage. La valeur de qualité par défaut est "q = 1". Par exemple,

  Accept-Language: da, en-gb;q=0.8, en;q=0.7

signifierait: "Je préfère le danois, mais j'accepterai l'anglais britannique et d'autres types d'anglais."

Tim Cooper
la source
28
Très gentil merci! Mais pourquoi ne pas simplement les lister par ordre de préférence?
kolypto
9
Alors, qu'est- ce que cela signifie exactement d'accepter 80% en-gb qualifié?
Pacerier
3
@Pacerier: Cela signifie que, dans le cas où votre site Web est multilingue, l'utilisateur préférerait que le contenu soit servi en anglais britannique plutôt qu'en anglais américain.
Tim Cooper
5
@TimCooper Pourquoi ne pas simplement avoir les langues dans l'ordre ou la préférence? La valeur ne semble pas avoir d'importance, à part qu'elle est plus grande que les autres.
Rob
6
à @kolypto, les listes de paramètres, que ce soit dans une URL ou dans un en-tête, n'ont pas d'ordre implicite.
JP Silvashy
37

Il est appelé le facteur de qualité relative dans la spécification:

Chaque gamme de supports PEUT être suivie d'un ou plusieurs paramètres d'acceptation, commençant par le paramètre "q" pour indiquer un facteur de qualité relative. Le premier paramètre "q" (le cas échéant) sépare le ou les paramètres de la plage de médias des paramètres d'acceptation. Les facteurs de qualité permettent à l'utilisateur ou à l'agent utilisateur d'indiquer le degré relatif de préférence pour cette gamme de supports, en utilisant l'échelle qvalue de 0 à 1 (section 3.9). La valeur par défaut est q = 1.

...

L'exemple

Accept: audio/*; q=0.2, audio/basic

DEVRAIT être interprété comme "Je préfère audio / basique, mais envoyez-moi n'importe quel type audio si c'est le meilleur disponible après une réduction de 80% de la qualité."

Voir également:

Sebastian Paaske Tørholm
la source
2
Je suis vraiment en retard à la fête - mais que voulez-vous dire "après une réduction de 80% de la qualité"? C'est le degré de préférence, pas la qualité du fichier audio, non? Ou est-ce que je comprends mal cela?
Mave le
10
@Mave: Eh bien, en pratique, c'est probablement surtout utilisé comme mesure de préférence. Cependant, dans sa formulation originale, je pense que c'est censé être basé sur la qualité de l'encodage. Considérez, par exemple, FLAC vs MP3. Vous pourriez dire quelque chose comme: "Envoyez-moi la version MP3 si elle est au pire 50% de la qualité de la version sans perte. Si ce n'est pas le cas, envoyez-moi la version FLAC." Comment quantifier une telle qualité et si cela est utilisé dans la pratique, je ne sais pas, mais je crois que c'est l'intention initiale.
Sebastian Paaske Tørholm
1
@ SebastianPaaskeTørholm Je suis venu ici pour plus d'informations à ce sujet. Il n'y a que deux endroits dans la RFC 7231 qui semblent faire allusion à ce sens secondaire, mais je ne vois pas très clairement comment il était censé fonctionner, car les deux significations pourraient entrer en conflit - par exemple, il semble que ce serait impossible pour exprimer une préférence pour un type avec perte par rapport à un type moins avec perte si qvalue est surchargé de cette façon.
Point
La langue préférée est-elle toujours le premier paramètre de l'en-tête?
oldboy
@BugWhisperer Le standard lié a un exemple plus élaboré, où il n'est pas le premier. Veuillez consulter cela. :)
Sebastian Paaske Tørholm
7

Le paramètre de qualité Accept-languages ​​peut être compris comme ceci:

en joignant un en- Accept-Language: pl_PL;q=0.8, en_US;q=0.2,tête à la demande que nous communiquons au serveur suivant le message

Serveur, veuillez me fournir la traduction polonaise de ce site Web, mais veuillez ne le faire que si sa qualité est >= %80%liée à un facteur de qualité. Au cas où la qualité serait <80%- cela ne me dérange pas d'obtenir la version anglaise, car cela n'a pas d'importance pour moi puisque je parle anglais de toute façon.

Ainsi, par exemple, en tant que fournisseur de contenu de page Web, nous pourrions introduire l' Accept-Languageanalyse des en-têtes de manière à ce que notre site Web soit adapté aux étrangers ne parlant pas du tout anglais (alors même la navigation traduite serait utile (les pages n'ayant traduit que la navigation, disons , ont q=0.1), où le contenu entièrement traduit a q=0.9et le contenu entièrement traduit et vérifié par des locuteurs natifs parlant à la fois la langue originale et le contenu de la langue traduite pourrait avoir q=0.99- car c'est la seule situation possible lorsque la signification du contenu est pleinement traduite)

test30
la source
La langue préférée est-elle toujours le premier paramètre de l'en-tête?
oldboy
@BugWhisperer oui, mais si vous voulez être vraiment strict par rapport à la norme et si votre traduction est assez simple ou faible - vous voudrez peut-être sauter la première valeur
test30
pourquoi l'utilisation de la deuxième valeur serait-elle plus stricte?
oldboy