Content NegotiationUnter Content Negotiation (Inhaltsvereinbarung)[1] versteht man eine Technik im Hypertext Transfer Protocol, die eine Abstimmung der Inhalte der angefragten Ressource aufgrund der Möglichkeiten und Vorzüge des Clients ermöglicht. FunktionsweiseIm HTTP stehen zur Inhaltsvereinbarung die Anfrage-Header-Felder Accept, Accept-Charset, Accept-Encoding sowie Accept-Language zur Verfügung, die eine durch Kommas getrennte Liste bewerteter Eigenschaften beschreiben.
Die Bewertung der Eigenschaften ist über den optionalen Qualitätsparameter Zusätzlich sollte bei der Nutzung von HTTP-Caching-Techniken in der Antwort des Webservers das Vary-Header-Feld diejenigen Header-Felder der Anfrage genannt werden, die bei der Abstimmung berücksichtigt wurden, die also zur eindeutigen Auswahl der gesendeten Repräsentation der Ressource führten. Falls die angeforderte URL eine generische ist, sie also die Repräsentation der Ressource nicht eindeutig beschreibt und stattdessen eine Inhaltsvereinbarung stattfindet, die ausgelieferte Repräsentation jedoch eine eigene spezifische URL besitzt, kann diese im Content-Location-Header-Feld angegeben werden. BeispielEine der am weitesten verbreiteten Anwendungen ist die automatische Auswahl der Sprache (englisch Language Negotiation). Dazu sendet der Client in seiner Anfrage das Feld Accept-Language: GET /path/to/resource HTTP/1.1 Host: example.com Accept-Language: de-de, de, en;q=0.5, fr;q=0.2 ⋮ Diese Angabe ist so zu interpretieren, dass der Client Deutsch, Englisch und Französisch akzeptiert, wobei allerdings bundesdeutsches Hochdeutsch vor allen anderen Deutsch-Varianten sowie vor Englisch und Französisch bevorzugt wird. Wenn der Server also über eine Version im bundesdeutschen Hochdeutsch, im österreichischen Deutsch und im Schweizer Hochdeutsch verfügt, sollte die bundesdeutsche Version ausgeliefert werden. Eine Antwort des Webservers könnte dann beispielsweise wie folgt aussehen, hier wird deutschsprachiger Content geladen, ohne eine Varietät des Standarddeutschen zu spezifizieren: HTTP/1.1 200 OK Content-Language: de Content-Location: /de/path/to/resource Vary: Accept-Language ⋮ HTTP-StatuscodesDas HTTP bietet spezielle Statuscodes an, die der Server an den Client senden sollte, wenn eine inhaltliche Abstimmung nicht möglich war:
Unterstützung durch WebserverDer Apache HTTP Server bietet über das Modul Weblinks
Einzelnachweise
|