Что такое 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»?

Ответы:


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- потому что это единственно возможная ситуация, когда значение контента полностью преобразовано)


самый предпочтительный язык всегда первый параметр в заголовке?
старик

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

почему использование второго значения будет более строгим?
старик
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.