Was ist q = 0,5 in Accept * HTTP-Headern?

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

Was bedeuten diese 'q =% f'?

kolypto
quelle

Antworten:

246

Dies wird als relativer Qualitätsfaktor bezeichnet . Es gibt auf einer Skala von 0 bis 1 an, welche Sprache der Benutzer bevorzugen würde, wie aus der HTTP / 1.1-Spezifikation, §14.4, hervorgeht :

Jedem Sprachbereich kann ein zugehöriger Qualitätswert zugewiesen werden, der eine Schätzung der Präferenz des Benutzers für die durch diesen Bereich angegebenen Sprachen darstellt. Der Qualitätswert ist standardmäßig "q = 1". Beispielsweise,

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

würde bedeuten: "Ich bevorzuge Dänisch, akzeptiere aber britisches Englisch und andere Arten von Englisch."

Tim Cooper
quelle
26
Sehr schön danke! Aber warum nicht einfach in der Reihenfolge ihrer Präferenz auflisten?
kolypto
9
Was genau bedeutet es also, 80% qualitativ en-gb zu akzeptieren?
Pacerier
3
@Pacerier: Für den Fall, dass Ihre Website mehrsprachig ist, würde der Benutzer den Inhalt lieber in britischem Englisch als in amerikanischem Englisch bereitstellen.
Tim Cooper
5
@ TimCooper Warum nicht einfach die Sprachen in der Reihenfolge oder Präferenz haben? Der Wert scheint keine Rolle zu spielen, außer dass er größer als andere ist.
Rob
6
Für @kolypto haben Parameterlisten, ob in einer URL oder in einem Header, keine implizite Reihenfolge.
JP Silvashy
37

In der Spezifikation wird dies als relativer Qualitätsfaktor bezeichnet :

Auf jeden Medienbereich können ein oder mehrere Akzeptanzparameter folgen, beginnend mit dem Parameter "q" zur Angabe eines relativen Qualitätsfaktors. Der erste "q" -Parameter (falls vorhanden) trennt die Medienbereichsparameter von den Accept-Parametern. Mithilfe von Qualitätsfaktoren kann der Benutzer oder Benutzeragent den relativen Präferenzgrad für diesen Medienbereich mithilfe der q-Werteskala von 0 bis 1 angeben (Abschnitt 3.9). Der Standardwert ist q = 1.

...

Das Beispiel

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

SOLLTE interpretiert werden als "Ich bevorzuge Audio / Basic, aber sende mir einen beliebigen Audiotyp, wenn er nach einem Qualitätsverlust von 80% der beste ist, der verfügbar ist."

Siehe auch:

Sebastian Paaske Tørholm
quelle
2
Ich bin wirklich zu spät zur Party - aber was meinst du mit "nach einem Qualitätsverlust von 80%"? Es ist der Grad der Präferenz, nicht die Qualität der Audiodatei, oder? Oder verstehe ich das falsch?
Mave
10
@Mave: Nun, in der Praxis wird es wahrscheinlich meistens als Maß für die Präferenz verwendet. In seiner ursprünglichen Formulierung glaube ich jedoch, dass es auf der Qualität der Codierung basieren soll. Betrachten Sie zum Beispiel FLAC vs MP3. Sie könnten so etwas wie sagen: "Senden Sie mir die MP3-Version, wenn sie im schlimmsten Fall 50% der Qualität der verlustfreien Version entspricht. Wenn dies nicht der Fall ist, senden Sie mir die FLAC-Version." Wie man eine solche Qualität quantifiziert und ob dies in der Praxis angewendet wird, weiß ich nicht, aber ich glaube, dass dies die ursprüngliche Absicht ist.
Sebastian Paaske Tørholm
1
@ SebastianPaaskeTørholm Ich bin hierher gekommen, um mehr Informationen dazu zu suchen. Es gibt nur zwei Stellen in RFC 7231, die auf diese sekundäre Bedeutung hinweisen, aber mir ist nicht sehr klar, wie es funktionieren sollte, da die beiden Bedeutungen miteinander in Konflikt stehen könnten - zum Beispiel scheint es unmöglich zu sein um eine Präferenz für einen verlustbehafteten Typ gegenüber einem weniger verlustbehafteten Typ auszudrücken, wenn qvalue auf diese Weise überladen wird.
Semikolon
Ist die am meisten bevorzugte Sprache immer der erste Parameter in der Kopfzeile?
Oldboy
@BugWhisperer Der verknüpfte Standard enthält ein ausführlicheres Beispiel, bei dem es nicht das erste ist. Bitte konsultieren Sie das. :)
Sebastian Paaske Tørholm
6

Der Qualitätsparameter "Accept-Languages" kann folgendermaßen verstanden werden:

Durch Anhängen eines Accept-Language: pl_PL;q=0.8, en_US;q=0.2,Headers an die Anforderung kommunizieren wir die folgende Nachricht an den Server

Server, bitte geben Sie mir eine polnische Übersetzung dieser Website, aber bitte tun Sie dies nur, wenn ihre Qualität >= %80%von einem verwandten Qualitätsfaktor ist. Für den Fall, dass Qualität ist <80%- es macht mir nichts aus, die englische Version zu bekommen, weil es für mich irrelevant ist, da ich sowieso Englisch spreche.

Als Anbieter von Webseiteninhalten könnten wir beispielsweise die Accept-LanguageAnalyse von Headern so einführen , dass unsere Website für Ausländer geeignet ist, die überhaupt kein Englisch sprechen (dann wäre sogar eine übersetzte Navigation hilfreich (Seiten, die nur die Navigation übersetzt haben, sagen wir) , haben q=0.1), wo vollständig übersetzte Inhalte q=0.9vollständig übersetzte Inhalte haben und von Muttersprachlern überprüft wurden, die sowohl die Originalsprache als auch übersetzte Sprachinhalte sprechen q=0.99- da dies die einzig mögliche Situation ist, wenn die Bedeutung des Inhalts vollständig übertragen wird).

test30
quelle
Ist die am meisten bevorzugte Sprache immer der erste Parameter in der Kopfzeile?
Oldboy
@ BugWhisperer ja, aber wenn Sie wirklich streng zum Standard sein wollen und wenn Ihre Übersetzung ziemlich einfach oder schwach ist - möchten Sie vielleicht den ersten Wert überspringen
test30
Warum sollte die Verwendung des zweiten Werts strenger sein?
Oldboy