O que é q = 0,5 nos cabeçalhos HTTP Accept *?

190
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

O que significam esses 'q =% f'?

Kolypto
fonte

Respostas:

246

Isso é chamado de fator de qualidade relativo . Ele especifica qual idioma o usuário prefere, em uma escala de 0 a 1, como pode ser visto na Especificação HTTP / 1.1, §14.4 :

Cada faixa de idioma pode receber um valor de qualidade associado, o que representa uma estimativa da preferência do usuário pelos idiomas especificados por essa faixa. O valor da qualidade é padronizado como "q = 1". Por exemplo,

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

significaria: "Prefiro dinamarquês, mas aceito inglês britânico e outros tipos de inglês".

Tim Cooper
fonte
26
Muito bom, obrigado! Mas por que não apenas listá-los na ordem de preferência?
Kolypto
9
Então, o que exatamente significa aceitar 80% de qualidade en-gb?
Pacerier 18/01/12
3
@Pacerier: significa que, no caso de seu site ser multilíngue, o usuário prefere que o conteúdo seja veiculado em inglês britânico, em vez de inglês americano.
Tim Cooper
5
@ TimCooper Por que não apenas ter os idiomas em ordem ou preferência? O valor não parece importar, além de ser maior que os outros.
Rob
6
para @kolypto, as listas de parâmetros, em um URL ou em um cabeçalho, não têm uma ordem implícita.
JP Silvashy
37

É chamado o fator de qualidade relativa na especificação:

Cada faixa de mídia pode ser seguida por um ou mais parâmetros de aceitação, começando com o parâmetro "q" para indicar um fator de qualidade relativo. O primeiro parâmetro "q" (se houver) separa o (s) parâmetro (s) da faixa de mídia dos parâmetros de aceitação. Os fatores de qualidade permitem que o usuário ou agente do usuário indique o grau relativo de preferência para esse intervalo de mídia, usando a escala qvalue de 0 a 1 (seção 3.9). O valor padrão é q = 1.

...

O exemplo

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

DEVE ser interpretado como "Prefiro o áudio / básico, mas envie-me qualquer tipo de áudio, se for o melhor disponível após uma redução de 80% na qualidade".

Veja também:

Sebastian Paaske Tørholm
fonte
2
Estou realmente atrasado para a festa - mas o que você quer dizer com "uma redução de 80% na qualidade"? É o grau de preferência, não a qualidade do arquivo de áudio, certo? Ou estou interpretando mal isso?
Mave
10
@ Save: Bem, na prática, provavelmente é usado principalmente como medida de preferência. No entanto, em sua formulação original, acredito que deve se basear na qualidade da codificação. Considere, por exemplo, FLAC vs MP3. Você pode dizer algo como: "Envie-me a versão MP3, se na pior das hipóteses for 50% da qualidade da versão sem perdas. Se não estiver, envie-me a versão FLAC". Como quantificar essa qualidade, e se isso é usado na prática, eu não sei, mas acredito que essa seja a intenção original.
Sebastian Paaske Tørholm
1
@ SebastianPaaskeTørholm Eu vim aqui procurando mais informações sobre isso. Existem apenas dois lugares na RFC 7231 que parecem sugerir esse significado secundário, mas não está muito claro para mim como ele deveria funcionar, pois os dois significados poderiam entrar em conflito um com o outro - por exemplo, parece que seria impossível para expressar uma preferência por um tipo com menos perdas do que por um menos com perdas se qvalue estiver sobrecarregado dessa maneira.
Ponto
o idioma mais preferido é sempre o primeiro parâmetro no cabeçalho?
Oldboy
@BugWhisperer O padrão vinculado tem um exemplo mais elaborado, onde não é o primeiro. Por favor, consulte isso. :)
Sebastian Paaske Tørholm
6

O parâmetro de qualidade Accept-languages ​​pode ser entendido assim:

anexando Accept-Language: pl_PL;q=0.8, en_US;q=0.2,cabeçalho à solicitação, comunicamos ao servidor a seguinte mensagem

Servidor, forneça-me a tradução para o polonês deste site, mas faça isso apenas se a qualidade for >= %80%de fator de qualidade relacionado. Caso a qualidade seja <80%- não me importo de obter a versão em inglês, porque é irrelevante para mim, pois falo inglês de qualquer maneira.

Por exemplo, como provedor de conteúdo de páginas da web, podemos introduzir a Accept-Languageanálise de cabeçalhos de tal maneira que nosso site seja adequado para estrangeiros que não falam inglês (então mesmo a navegação traduzida seria útil (páginas que traduzem apenas a navegação, digamos , have q=0.1), onde o conteúdo q=0.9totalmente traduzido e o conteúdo totalmente traduzido são verificados por falantes nativos que falam tanto o idioma original quanto o conteúdo do idioma traduzido q=0.99- porque essa é a única situação possível quando o significado do conteúdo é totalmente transduzido)

test30
fonte
o idioma mais preferido é sempre o primeiro parâmetro no cabeçalho?
Oldboy
@BugWhisperer sim, mas se você quiser ser realmente estrita ao padrão e se a sua tradução é bastante simples ou fraco - você pode querer ignorar o primeiro valor
test30
por que usar o segundo valor seria mais rigoroso?
Oldboy