¿Qué es q = 0.5 en Aceptar * encabezados 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

¿Qué significan estos 'q =% f'?

Kolypto
fuente

Respuestas:

247

Esto se llama factor de calidad relativa . Especifica qué idioma preferiría el usuario, en una escala de 0 a 1, como se puede ver en la especificación HTTP / 1.1, §14.4 :

A cada rango de idioma PUEDE asignársele un valor de calidad asociado que representa una estimación de la preferencia del usuario por los idiomas especificados por ese rango. El valor de calidad predeterminado es "q = 1". Por ejemplo,

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

significaría: "Prefiero el danés, pero aceptaré el inglés británico y otros tipos de inglés".

Tim Cooper
fuente
26
¡Muy bien, gracias! Pero, ¿por qué no solo enumerarlos en el orden de preferencia?
kolypto
9
Entonces, ¿ qué significa exactamente aceptar el 80% de en-gb calificado?
Pacerier
3
@Pacerier: significa que, en el caso de que su sitio web sea multilingüe, el usuario preferiría que el contenido se sirviera en inglés británico, en lugar de inglés americano.
Tim Cooper el
55
@TimCooper ¿Por qué no solo tener los idiomas en orden o preferencia? El valor no parece importar, aparte de ser más grande que otros.
Rob
66
a @kolypto, las listas de parámetros, ya sea en una URL o en un encabezado, no tienen un orden implícito.
JP Silvashy
37

Se llama factor de calidad relativa en la especificación:

Cada rango de medios PUEDE ir seguido de uno o más parámetros de aceptación, comenzando con el parámetro "q" para indicar un factor de calidad relativo. El primer parámetro "q" (si lo hay) separa los parámetros del rango de medios de los parámetros de aceptación. Los factores de calidad permiten al usuario o agente de usuario indicar el grado relativo de preferencia para ese rango de medios, utilizando la escala de valor q de 0 a 1 (sección 3.9). El valor predeterminado es q = 1.

...

El ejemplo

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

DEBE interpretarse como "Prefiero audio / básico, pero envíeme cualquier tipo de audio si es el mejor disponible después de una reducción del 80% en la calidad".

Ver también:

Sebastian Paaske Tørholm
fuente
2
Realmente llego tarde a la fiesta, pero ¿a qué te refieres con "después de un 80% de reducción de calidad"? Es el grado de preferencia, no la calidad del archivo de audio, ¿verdad? ¿O estoy malinterpretando esto?
Mave
10
@Mave: Bueno, en la práctica probablemente se usa principalmente como una medida de preferencia. Sin embargo, en su formulación original, creo que está basado en la calidad de la codificación. Considere, por ejemplo, FLAC vs MP3. Podría decir algo como: "Envíame la versión en MP3 si, en el peor de los casos, es el 50% de la calidad de la versión sin pérdidas. Si no es así, envíame la versión FLAC". Cómo cuantificar esa calidad, y si eso se usa en la práctica, no lo sé, pero creo que esa es la intención original.
Sebastian Paaske Tørholm
1
@ SebastianPaaskeTørholm Vine aquí buscando más información sobre esto. Solo hay dos lugares en RFC 7231 que parecen insinuar este significado secundario, pero no me queda muy claro cómo se pretendía que funcionara, ya que los dos significados podrían entrar en conflicto entre sí; por ejemplo, parece que sería imposible para expresar una preferencia por un tipo con pérdida en lugar de un tipo con menos pérdida si qvalue se sobrecarga de esta manera.
Punto
¿El idioma preferido es siempre el primer parámetro en el encabezado?
oldboy
@BugWhisperer El estándar vinculado tiene un ejemplo más elaborado, donde no es el primero. Por favor consulte eso. :)
Sebastian Paaske Tørholm
6

El parámetro de calidad de aceptar idiomas se puede entender así:

adjuntando Accept-Language: pl_PL;q=0.8, en_US;q=0.2,encabezado a la solicitud nos comunicamos con el servidor después del mensaje

Servidor, proporcione la traducción al polaco de este sitio web, pero hágalo solo si su calidad es >= %80%de factor de calidad relacionado. En caso de que la calidad sea <80%- no me importa obtener la versión en inglés, porque es irrelevante para mí ya que hablo inglés de todos modos.

Entonces, por ejemplo, como proveedor de contenido de páginas web, podríamos introducir el Accept-Languageanálisis de encabezado de tal manera que nuestro sitio web sea adecuado para extranjeros que no hablen inglés en absoluto (entonces incluso la navegación traducida sería útil (digamos que las páginas han traducido solo la navegación) , have q=0.1), donde el contenido totalmente traducido tiene contenido q=0.9completamente traducido y verificado por hablantes nativos que hablan tanto el idioma original como el contenido traducido q=0.99, porque esta es la única situación posible cuando el significado del contenido se transduce por completo)

test30
fuente
¿El idioma preferido es siempre el primer parámetro en el encabezado?
oldboy
@BugWhisperer sí, pero si quiere ser realmente estricto con el estándar y si su traducción es bastante simple o débil, es posible que desee omitir el primer valor
test30
¿por qué usar el segundo valor sería más estricto?
oldboy