Подтвердить что ты не робот

Зачем использовать значения качества в заголовке Accept-Language HTTP?

В HTTP заголовок запроса Accept-Language выглядит так:

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

Почему значения качества (q=...) были включены в спецификацию HTTP? Разве нельзя отсортировать языки по качеству, выбрать произвольный порядок для языков с таким же качеством и не использовать языки с q=0?

4b9b3361

Ответ 1

Интересный вопрос.

Обсуждение того, как появилась эта функция, вероятно, захоронено где-то в архивах списков рассылки, для которых я не смог найти правильную ссылку. Ваш пример не единственный проблемный. Что такое сервер с "fr; q = 1.0, en; q = 1.0", если он поддерживает оба языка. Подавать французский, потому что это первый? Что относительно "fr, en; q = 1.0"?

Мне кажется, что упорядоченный список языковых предпочтений лучше подходит для проблемы, чем текущий взвешенный (и, возможно, отсортированный) список. Слишком много крайних случаев, когда spec является мамой о ожидаемом поведении из реализации.

По крайней мере (некоторые из) вкладчиков спецификации соглашаются, что эта функция далека от совершенства (Ключевые различия между HTTP/1.0 и HTTP/1.1 - Представленная бумага на восьмой Международной конференции в Интернете):

"Поскольку механизм согласования контента допускает qvalues ​​и wildcards и выражает вариации во многих измерениях (язык, набор символов, контент-тип и кодирование содержимого), автоматический выбор варианта" наилучшего доступного "может быть сложным и может порождать неожиданные результаты. Эти варианты могут взаимодействовать с кешированием тонким образом, см. обсуждение в разделе 3.4.

Консолидация контента promises станет благодатной областью для дополнительной эволюции протокола. Например, рабочая группа HTTP признала полезность автоматического согласования функций клиента, таких как размер экрана, разрешение и глубина цвета. IETF создал рабочую группу по согласованию контента для продолжения работы в этой области. "

Короче говоря, у меня нет реального ответа, но, надеюсь, участник процесса спецификации подключается.

Ответ 2

Ценности качества | MDN

Значения качества или q-значения и q-факторы используются для описания порядка приоритета значений в списке через запятую. Это специальный синтаксис, допустимый в некоторых заголовках HTTP и в HTML. Важность значения отмечается суффиксом ;q= сразу же следует значение от 0 до 1 включающее до трех десятичных цифр, причем самое высокое значение обозначает наивысший приоритет. Если нет, значением по умолчанию является 1.

Например, следующий синтаксис:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Указывает порядок приоритета:

1.0 -> text/html and application/xhtml+xml
0.9 -> application/xml
0.8 -> */*