Content Negotiation
aus Wikipedia, der freien Enzyklopädie
Unter Content Negotiation versteht man einen Mechanismus im HTTP-Protokoll, der eine Abstimmung der Inhalte des aufgerufenen Dokuments aufgrund der Möglichkeiten und Einstellungen des Clients ermöglicht. Diese Möglichkeit sollte von einer Internetseite angeboten werden, muss sie aber nicht.
Eine der am weitesten verbreiteten Anwendungen ist die automatische Auswahl der Sprache. Dazu sendet der Client in seiner Anfrage das Feld Accept-Language (im Beispiel mit der Sprache deutsch):
Accept-Language: de
Dem ausführenden Server wird damit bekannt gegeben, dass der Benutzer Deutsch als Sprache bevorzugt. Der Server hat dann die Möglichkeit, die deutsche Version der Seite zu senden, oder – weiter verbreitet – den Benutzer auf eine spezielle Seite weiterzuleiten.
Accept-Language: de; q=1.0, en; q=0.5, fr; q=0.2 Accept: text/html; q=1.0, text/*; q=0.8, image/gif; q=0.6, image/jpeg; q=0.6, image/*; q=0.5, */*; q=0.1
Mit dieser komplexeren Anfrage gibt der Client an, dass er deutsch, englisch und französisch versteht, wobei er deutsch am besten, englisch am zweitbesten und französisch nur wenig kann.
In der zweiten Zeile wird angegeben, dass er seine Dokumente am liebsten im MIME-Typ text/html (HTML) erhält, aber auch andere Texte anzeigen kann. Bei Bildern werden die Formate GIF und JPEG bevorzugt, aber auch alle anderen können angezeigt werden. Der letzte Block (ab */*) gibt an, dass auch alle anderen Dateien angenommen werden. Diese zeigt der Browser in der Regel aber nicht an, sondern bietet an sie zu speichern.
Im Zusammenhang damit existiert eine weitere Anwendung, sie liegt im Senden verschiedener Versionen eines Bildes. Kann ein Browser beispielsweise nur Bilder im GIF-Format, nicht aber im PNG-Format anzeigen, so kann der Server dem Benutzer die bevorzugte Bild-Version senden.
[Bearbeiten] HTTP-Statuscodes
Das HTTP bietet Statuscodes an, die der Server an den Client senden sollte, je nachdem ob eine inhaltliche Abstimmung möglich war oder nicht:
- 300 Multiple Choices
- Wird gesendet wenn das Dokument unter den entsprechenden Bedingungen an anderer Stelle zu finden ist. Die entsprechende Adresse muss im Location-Header mitgesendet werden und sollte auch im Body nochmals angegeben werden.
- 406 Not Acceptable
- Wird gesendet wenn das aufgerufene Dokument zwar existiert, die vom Client gesendeten Bedingungen aber nicht zutreffen.
[Bearbeiten] Apache
Der Apache HTTP Server bietet dem Anbieter die Möglichkeit mehrere Sprachen anzubieten, ohne etwas programmieren zu müssen. Dazu muss der Anbieter lediglich die ISO-639-Kennung der jeweiligen Sprache an den Dateinamen anhängen.
Diese Form der Inhaltsabstimmung wird eher selten verwendet, nicht zuletzt weil sie sehr streng ist und zum Beispiel „de“ (deutsch) nicht verwendet, wenn der Benutzer detaillierter angegeben hat, dass er „de-ch“ (schweizerdeutsch) bevorzugt.
[Bearbeiten] Weblinks
- RFC 2616 siehe Sektion 12: Content Negotiation (englisch)
- RFC 2295 Transparent Content Negotiation in HTTP (englisch)
- Apache Content Negotiation (englisch)
- Ermitteln der Sprache des Browsers mit PHP