Che cos'è q = 0,5 nelle intestazioni HTTP Accept *?


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

Cosa significano questi 'q =% f'?

Risposte:


247

Questo si chiama fattore di qualità relativo . Specifica quale lingua preferirebbe l'utente, su una scala da 0 a 1, come si può vedere dalla specifica HTTP / 1.1, §14.4 :

A ogni intervallo di lingue può essere assegnato un valore di qualità associato che rappresenta una stima della preferenza dell'utente per le lingue specificate da tale intervallo. Il valore di qualità predefinito è "q = 1". Per esempio,

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

significherebbe: "Preferisco il danese, ma accetterò l'inglese britannico e altri tipi di inglese".


26
Molto bello, grazie! Ma perché non elencarli nell'ordine di preferenza?
Kolypto,

9
Cosa significa esattamente accettare l'80% qualificato en-gb?
Pacerier,

3
@Pacerier: significa che, nel caso in cui il tuo sito web sia multilingue, l'utente preferirebbe che il contenuto fosse offerto in inglese britannico, piuttosto che in inglese americano.
Tim Cooper,

5
@TimCooper Perché non avere solo le lingue in ordine o in preferenza? Il valore non sembra importare, a parte il fatto che è più grande di altri.
Rob

6
a @kolypto, gli elenchi di parametri, sia in un URL che in un'intestazione, non hanno un ordine implicito.
JP Silvashy,

37

Si chiama il fattore di qualità relativo nella specifica:

Ciascuna gamma di supporti può essere seguita da uno o più parametri di accettazione, a partire dal parametro "q" per indicare un fattore di qualità relativo. Il primo parametro "q" (se presente) separa i parametri dell'intervallo multimediale dai parametri accetta. I fattori di qualità consentono all'utente o all'agente utente di indicare il grado relativo di preferenza per quell'intervallo di media, utilizzando la scala qvalue da 0 a 1 (sezione 3.9). Il valore predefinito è q = 1.

...

L'esempio

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

DOVREBBE essere interpretato come "Preferisco l'audio / di base, ma inviami qualsiasi tipo di audio se è il migliore disponibile dopo una riduzione dell'80% della qualità".

Guarda anche:


2
Sono davvero in ritardo alla festa, ma cosa intendi con "riduzione dell'80% della qualità"? È il grado di preferenza, non la qualità del file audio, giusto? O sto leggendo male questo?
Mave,

10
@Mave: in pratica è probabilmente usato principalmente come misura di preferenza. Tuttavia, nella sua formulazione originale, credo che debba essere basato sulla qualità della codifica. Considera, ad esempio, FLAC vs MP3. Potresti dire qualcosa del tipo: "Inviami la versione MP3 se nella peggiore delle ipotesi è il 50% della qualità della versione senza perdita. In caso contrario, inviami la versione FLAC." Non so come quantificare tale qualità e se sia utilizzato nella pratica, ma credo che sia l'intenzione originale.
Sebastian Paaske Tørholm,

1
@ SebastianPaaskeTørholm Sono venuto qui alla ricerca di maggiori informazioni su questo. Ci sono solo due posti in RFC 7231 che sembrano suggerire questo significato secondario, ma non mi è molto chiaro come avrebbe dovuto funzionare, poiché i due significati potrebbero essere in conflitto tra loro - per esempio sembra che sarebbe impossibile esprimere una preferenza per un tipo con perdita rispetto a un tipo con meno perdita se qvalue è sovraccarico in questo modo.
Punto

la lingua preferita è sempre il primo parametro nell'intestazione?
oldboy

@BugWhisperer Lo standard collegato ha un esempio più elaborato, in cui non è il primo. Si prega di consultare quello. :)
Sebastian Paaske Tørholm il

6

Il parametro di qualità Accept-Languages ​​può essere compreso in questo modo:

allegando l' Accept-Language: pl_PL;q=0.8, en_US;q=0.2,intestazione alla richiesta comunichiamo al server il seguente messaggio

Server, ti prego di fornirmi una traduzione polacca di questo sito Web, ma per favore fallo solo se la sua qualità ha >= %80%un fattore di qualità correlato. Nel caso in cui la qualità sia <80%: non mi dispiace ottenere la versione inglese, perché è irrilevante per me dal momento che parlo inglese comunque.

Quindi, ad esempio, come fornitore di contenuti di pagine Web potremmo introdurre l' Accept-Languageanalisi delle intestazioni in modo tale che il nostro sito Web sia adatto a stranieri che non parlano affatto inglese (quindi sarebbe utile anche la navigazione tradotta (le pagine che hanno tradotto solo la navigazione, diciamo , have q=0.1), dove il contenuto completamente tradotto ha contenuto q=0.9completamente tradotto e verificato da madrelingua che parlano sia la lingua originale sia il contenuto della lingua tradotta, q=0.99perché questa è l'unica situazione possibile quando il significato del contenuto viene trasdotto completamente)


la lingua preferita è sempre il primo parametro nell'intestazione?
oldboy

@BugWhisperer sì, ma se vuoi essere davvero rigoroso rispetto allo standard e se la tua traduzione è piuttosto semplice o debole - potresti voler saltare il primo valore
test30

perché usare il secondo valore sarebbe più rigoroso?
oldboy
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.