Что такое q = 0,5 в заголовках Accept * HTTP?

191
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

Что означают эти «q =% f»?

kolypto
источник

Ответы:

247

Это называется относительным фактором качества . Он указывает, какой язык предпочтет пользователь в масштабе от 0 до 1, как это видно из спецификации HTTP / 1.1, §14.4 :

Каждому языковому диапазону МОЖЕТ быть присвоен соответствующий показатель качества, который представляет собой оценку предпочтений пользователя для языков, указанных в этом диапазоне. Значение качества по умолчанию равно "q = 1". Например,

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

будет означать: «Я предпочитаю датский, но приму британский английский и другие типы английского».

Тим Купер
источник
26
Очень мило спасибо! Но почему бы просто не перечислить их в порядке предпочтения?
Колыпто
9
Итак, что именно означает принять квалифицированный en-gb на 80%?
Pacerier
3
@Pacerier: это означает, что в случае, если ваш веб-сайт является многоязычным, пользователь предпочел бы, чтобы контент предоставлялся на британском английском, а не на американском английском.
Тим Купер
5
@TimCooper Почему бы просто не иметь языки в порядке или предпочтении? Значение не имеет значения, кроме того, что оно больше, чем другие.
Роб
6
для @kolypto списки параметров, будь то в URL или в заголовке, не имеют неявного порядка.
JP Silvashy
37

Это называется относительным фактором качества в спецификации:

За каждым медиа-диапазоном МОЖЕТ следовать один или несколько параметров accept, начиная с параметра «q» для указания относительного показателя качества. Первый параметр «q» (если есть) отделяет параметр (ы) медиа-диапазона от параметров accept. Коэффициенты качества позволяют пользователю или пользовательскому агенту указывать относительную степень предпочтения для этого медиа-диапазона, используя шкалу qvalue от 0 до 1 (раздел 3.9). Значением по умолчанию является q = 1.

...

Пример

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

СЛЕДУЕТ интерпретировать как «Я предпочитаю аудио / базовый, но присылайте мне любой тип аудио, если он наилучший из доступных после 80% снижения качества».

Смотрите также:

Себастьян Пааске Тёрхольм
источник
2
Я действительно опаздываю на вечеринку - но что вы имеете в виду "после 80% снижения качества"? Это степень предпочтения, а не качество аудиофайла, верно? Или я неправильно это понимаю?
Сделано
10
@Mave: Ну, на практике это, вероятно, в основном используется в качестве меры предпочтения. Тем не менее, в его оригинальной формулировке я считаю, что она должна основываться на качестве кодирования. Рассмотрим, например, FLAC против MP3. Вы можете сказать что-то вроде: «Пришлите мне версию MP3, если она в худшем случае составляет 50% от качества версии без потерь. Если это не так, пришлите мне версию FLAC». Как количественно оценить такое качество и используется ли оно на практике, я не знаю, но я верю, что это будет первоначальное намерение.
Себастьян Пааске Торхольм,
1
@ SebastianPaaskeTørholm Я приехал сюда в поисках дополнительной информации по этому вопросу. В RFC 7231 есть только два места, которые, по-видимому, намекают на это вторичное значение, но мне не очень понятно, как оно должно было работать, поскольку эти два значения могут конфликтовать друг с другом - например, кажется, что это невозможно выражать предпочтение типу проигравшего по сравнению с типом с меньшими потерями, если qvalue перегружен таким образом.
точка с запятой
самый предпочтительный язык всегда первый параметр в заголовке?
старик
@BugWhisperer У связанного стандарта есть более сложный пример, где он не первый. Пожалуйста, проконсультируйтесь с этим. :)
Себастьян Пааске Торхольм,
6

Параметр качества Accept-languages ​​можно понимать так:

прикрепляя Accept-Language: pl_PL;q=0.8, en_US;q=0.2,заголовок к запросу, мы сообщаем серверу следующее сообщение

Сервер, пожалуйста, предоставьте мне польский перевод этого сайта, но, пожалуйста, делайте это только в том случае, если его качество >= %80%связано с качеством. В случае, если качество <80%- я не против получить английскую версию, потому что она не имеет значения для меня, так как я все равно говорю по-английски.

Так, например, как поставщик контента веб-страницы мы могли бы ввести Accept-Languageсинтаксический анализ заголовка таким образом, чтобы наш веб-сайт был пригоден для иностранцев, не говорящих по-английски вообще (тогда была бы полезна даже переведенная навигация (страницы, переведенные только на навигацию, скажем, , иметь q=0.1), где полностью переведенный контент имеет q=0.9и полностью переведенный контент и проверен носителями языка, говорящими как на языке оригинала, так и на языке переведенного языка, q=0.99- потому что это единственно возможная ситуация, когда значение контента полностью преобразовано)

test30
источник
самый предпочтительный язык всегда первый параметр в заголовке?
старик
@BugWhisperer да, но если вы хотите быть действительно строгим к стандарту и если ваш перевод довольно прост или слаб - вы можете пропустить первое значение
test30
почему использование второго значения будет более строгим?
старик