Що таке 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
Отже, що саме означає прийняти 80% якісного en-gb?
Pacerier

3
@Pacerier: Це означає, що у випадку, коли ваш веб-сайт багатомовний, користувач вважає за краще вміст, який подається англійською англійською, а не американською англійською.
Тім Купер

5
@TimCooper Чому б просто не було впорядкованих мов? Цінність, здається, не має значення, крім того, що вона більша за інші.
Роб

6
для @kolypto, списки параметрів у URL-адресі чи в заголовку не мають помірного порядку.
JP Сільваші

37

Він називається відносним фактором якості в специфікації:

Кожен медіа-діапазон МОЖЕ дотримуватися одного або декількох параметрів прийому, починаючи з параметра "q" для вказівки відносного коефіцієнта якості. Перший параметр "q" (якщо такий є) відокремлює параметри медіапазону медіа від парамерів прийняття. Коефіцієнти якості дозволяють користувачеві або агенту користувача вказати відносну ступінь переваги для цього медіа-діапазону, використовуючи шкалу qvalue від 0 до 1 (розділ 3.9). Значення за замовчуванням - q = 1.

...

Приклад

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

ТРИМУВАТИ тлумачити як "Я віддаю перевагу аудіо / базовий, але надішліть мені будь-який тип звуку, якщо він найкращий, доступний після 80-відсоткової оцінки якості".

Дивитися також:


2
Я дійсно запізнююся на вечірку - але що ви маєте на увазі "після 80% надбавки в якості"? Це ступінь переваги, а не якість аудіофайлу, правда? Або я це неправильно читаю?
Mave

10
@Mave: Ну, на практиці це, мабуть, в основному використовується як міра уподобань. Однак, у своїй оригінальній рецептурі, я вважаю, що це мало базуватися на якості кодування. Розглянемо, наприклад, FLAC проти MP3. Ви можете сказати щось на кшталт: "Надішліть мені версію MP3, якщо вона в гіршому випадку становить 50% від якості версії без втрат. Якщо це не так, надішліть мені версію FLAC." Як кількісно оцінити таку якість і чи це застосовується на практиці, я не знаю, але я вважаю, що це буде первісний намір.
Себастьян Пааске Тьорхолм

1
@ SebastianPaaskeTørholm Я завітав сюди, щоб дізнатися більше про це. У RFC 7231 є лише два місця, які, здається, натякають на це вторинне значення, але мені не дуже зрозуміло, як це було призначено для роботи, оскільки два значення можуть конфліктувати між собою - наприклад, здається, це було б неможливо висловити перевагу типу збитковішого перед типом, що втрачає менше, якщо qvalue перевантажена таким чином.
напівколонка

є найбільш бажаною мовою завжди перший параметр у заголовку?
oldboy

@BugWhisperer Зв'язаний стандарт має більш детальний приклад, коли він не перший. Будь ласка, проконсультуйтеся з цим. :)
Себастьян Пааске Торхолм

6

Параметр якості мов прийняття можна зрозуміти так:

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


є найбільш бажаною мовою завжди перший параметр у заголовку?
oldboy

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

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