Co to jest q = 0,5 w nagłówkach Accept * HTTP?

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

Co oznaczają te „q =% f”?

kolypto
źródło

Odpowiedzi:

251

Nazywa się to względnym współczynnikiem jakości . Określa preferowany język użytkownika, w skali od 0 do 1, jak widać w specyfikacji HTTP / 1.1, §14.4 :

Każdy zakres językowy MOŻE mieć przypisaną wartość jakości, która reprezentuje oszacowanie preferencji użytkownika w zakresie języków określonych w tym zakresie. Wartością domyślną jest „q = 1”. Na przykład,

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

oznaczałoby: „Wolę duński, ale akceptuję brytyjski angielski i inne rodzaje angielskiego”.

Tim Cooper
źródło
28
Bardzo fajnie, dziękuję! Ale dlaczego nie wymienić ich w kolejności preferencji?
kolypto
9
Więc co dokładnie oznacza zaakceptowanie 80% kwalifikowanego en-gb?
Pacerier
3
@Pacerier: Oznacza to, że w przypadku, gdy Twoja witryna jest wielojęzyczna, użytkownik wolałby, aby treść była podawana w języku angielskim brytyjskim, a nie amerykańskim.
Tim Cooper
5
@TimCooper Dlaczego po prostu nie ustawić języków w porządku lub preferencji? Wartość nie wydaje się mieć znaczenia, poza tym, że jest większa niż inne.
Rob
6
do @kolypto listy parametrów, czy to w adresie URL, czy w nagłówku, nie mają ukrytej kolejności.
JP Silvashy
37

Nazywa się to względnym współczynnikiem jakości w specyfikacji:

Po każdym zakresie mediów MOŻE następować jeden lub więcej parametrów akceptacji, zaczynając od parametru „q” wskazującego względny współczynnik jakości. Pierwszy parametr „q” (jeśli istnieje) oddziela parametr (y) zakresu mediów od parametrów accept-params. Czynniki jakości pozwalają użytkownikowi lub agentowi użytkownika wskazać względny stopień preferencji dla tego zakresu mediów przy użyciu skali qvalue od 0 do 1 (sekcja 3.9). Wartość domyślna to q = 1.

...

Przykład

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

POWINIEN być interpretowane jako „Preferuję dźwięk / podstawowy, ale wyślij mi dowolny typ dźwięku, jeśli jest najlepszy z dostępnych po 80% obniżce jakości”.

Zobacz też:

Sebastian Paaske Tørholm
źródło
2
Jestem naprawdę spóźniony na imprezę - ale co masz na myśli „po 80% obniżce jakości”? To stopień preferencji, a nie jakość pliku audio, prawda? A może źle to czytam?
Mave
10
@Mave: Cóż, w praktyce jest to prawdopodobnie używane głównie jako miara preferencji. Jednak w swoim oryginalnym sformułowaniu uważam, że ma to być oparte na jakości kodowania. Weźmy na przykład pod uwagę FLAC vs MP3. Możesz powiedzieć na przykład: „Wyślij mi wersję MP3, jeśli w najgorszym przypadku jest to 50% jakości wersji bezstratnej. Jeśli nie, prześlij mi wersję FLAC”. Nie wiem, jak kwantyfikować taką jakość i czy jest to stosowane w praktyce, ale uważam, że jest to pierwotna intencja.
Sebastian Paaske Tørholm
1
@ SebastianPaaskeTørholm Przyszedłem tutaj, szukając więcej informacji na ten temat. W RFC 7231 są tylko dwa miejsca, które wydają się wskazywać na to drugorzędne znaczenie, ale nie jest dla mnie jasne, jak miało to działać, ponieważ te dwa znaczenia mogą ze sobą kolidować - na przykład wydaje się, że byłoby to niemożliwe aby wyrazić preferencję dla typu stratnego zamiast typu mniej stratnego, jeśli qvalue jest w ten sposób przeciążony.
Średnik
czy najbardziej preferowany język jest zawsze pierwszym parametrem w nagłówku?
oldboy
@BugWhisperer Połączony standard ma bardziej złożony przykład, w którym nie jest pierwszy. Proszę się z tym zapoznać. :)
Sebastian Paaske Tørholm
7

Parametr jakości akceptacji języków można rozumieć następująco:

dołączając Accept-Language: pl_PL;q=0.8, en_US;q=0.2,nagłówek do żądania, przekazujemy do serwera następujący komunikat

Serwer, proszę o dostarczenie mi polskiego tłumaczenia tej strony, ale proszę zrób to tylko wtedy, gdy jakość ma >= %80%związek z jakością. W przypadku jakości <80%- nie mam nic przeciwko zdobyciu angielskiej wersji, bo nie ma to dla mnie znaczenia, bo i tak mówię po angielsku.

Na przykład jako dostawca treści strony internetowej możemy wprowadzić Accept-Languageparsowanie nagłówków w taki sposób, aby nasza witryna była odpowiednia dla obcokrajowców nie mówiących w ogóle po angielsku (wtedy nawet przetłumaczona nawigacja byłaby pomocna (strony, które mają przetłumaczoną tylko nawigację, powiedzmy , have q=0.1), gdzie w pełni przetłumaczona treść ma q=0.9iw pełni przetłumaczoną treść i zweryfikowana przez native speakerów mówiących zarówno w języku oryginalnym, jak i przetłumaczonym q=0.99- ponieważ jest to jedyna możliwa sytuacja, gdy znaczenie treści jest w pełni przeniesione

test30
źródło
czy najbardziej preferowany język jest zawsze pierwszym parametrem w nagłówku?
oldboy
@BugWhisperer tak, ale jeśli chcesz być naprawdę rygorystyczny względem standardu i jeśli twoje tłumaczenie jest dość proste lub słabe - możesz pominąć pierwszą wartość
test30
dlaczego użycie drugiej wartości miałoby być bardziej rygorystyczne?
oldboy