Indholdsforhandling - Content negotiation

Indholdsforhandling refererer til mekanismer defineret som en del af HTTP, der gør det muligt at betjene forskellige versioner af et dokument (eller mere generelt repræsentationer af en ressource) i den samme URI , så brugeragenter kan angive, hvilken version der passer bedst til deres muligheder. . En klassisk brug af denne mekanisme er at betjene et billede i GIF- eller PNG -format, så en browser, der ikke kan vise PNG -billeder (f.eks. MS Internet Explorer 4), vil blive vist GIF -versionen.

En ressource kan være tilgængelig i flere forskellige repræsentationer; for eksempel kan det være tilgængeligt på forskellige sprog eller forskellige medietyper. En måde at vælge det mest passende valg på er at give brugeren en indeksside og lade dem vælge det mest passende valg; men det er ofte muligt at automatisere valget baseret på nogle udvælgelseskriterier.

Mekanismer

HTTP giver mulighed for flere forskellige indholdsforhandlingsmekanismer, herunder: serverdrevne (eller proaktive), agentdrevne (eller reaktive), transparente og/eller hybridkombinationer deraf.

Server-drevet

Server-drevet eller proaktiv indholdsforhandling udføres af algoritmer på serveren, som vælger blandt de mulige variantrepræsentationer. Dette udføres sædvanligvis baseret på acceptkriterier fra brugeragent.

For at opsummere, hvordan dette fungerer, når en brugeragent sender en anmodning til en server, oplyser brugeragenten serveren, hvilke medietyper eller andre aspekter af indholdspræsentation den forstår med vurderinger af, hvor godt den forstår dem. Mere præcist giver brugeragenten HTTP -headere, der angiver acceptable aspekter af ressourcen og kvalitetsfaktorer for dem. Serveren kan derefter levere den version af den ressource, der bedst passer til brugeragentens behov.

For eksempel kan en browser angive, at den gerne vil have oplysninger på tysk ved at indstille Accept-Languagelignende:

Accept-Language: de

Browseren kan i stedet sige, at tysk foretrækkes, hvis det er muligt, men at engelsk også er acceptabelt ved at indstille:

Accept-Language: de; q=1.0, en; q=0.5

Hvor 'q' - kvalitetsfaktoren for tysk er højere end for engelsk.

Flere HTTP -headere leveres ofte sammen til indholdsformat eller, specifikt medietype, sprog og et par andre aspekter af en ressource. Ud over det almindeligt anvendte Acceptheader til Media Type, Accept-Languageheaderen til sprogforhandling, beskriver RFC 7231 også henholdsvis Accept-Charset& Accept-Encodingsfor tegnkodninger og indholdskodninger (komprimering).

Et eksempel på en mere kompleks anmodning er, hvor en browser sender overskrifter om sprog, der angiver, at tysk foretrækkes, men at engelsk er acceptabelt som ovenfor, og at HTML ( text/html) foretrækkes frem for andre teksttyper ( text/*), GIF ( image/gif) eller JPEG ( image/jpg) -billeder foretrækkes frem for andre billedformater ( image/*), men at enhver anden medietype ( */*) accepteres som en sidste udvej:

Accept-Language: de; q=1.0, en; q=0.5
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

Ud over aspekter af server-drevet indholdsforhandling efter indholdstype og efter sprog , der er angivet i RFC 7231, er der udvidelser, der definerer andre aspekter af indholdsforhandling, f.eks. Memento, der beskriver brug af et Accept-Datetimeheader til at hente version af en ressourcepræsentation på bestemte punkter i tide og IETF/W3Cs indholdsforhandling efter profil, der beskriver brug af et Accept-Profileoverskrift til at hente ressourcepræsentationer, der er i overensstemmelse med dataprofiler.

Hverken RFC 7231 eller de nyere relaterede specifikationer som f.eks. Indholdsforhandling efter profil angiver, hvordan afvejninger skal løses i tilfælde, hvor forskellige overskrifter angiver modstridende krav, f.eks. I ovenstående eksempel, at vælge mellem en HTML-side på engelsk og et GIF-billede på tysk.

Agent-drevet

Agent-drevet eller reaktiv indholdsforhandling udføres af algoritmer i brugeragenten, som vælger blandt de mulige variantrepræsentationer. Dette udføres almindeligvis baseret på en serverliste med repræsentationer og metadata om dem.

For at opsummere, hvordan dette fungerer, når en brugeragent indsender en anmodning til en server, informerer serveren brugeragenten om, hvilke repræsentationer den har til rådighed, samt eventuelle metadata, den har om hver repræsentation (f.eks. Indholdstype, kvalitet, sprog, etc.). Brugeragenten indsender derefter anmodningen igen til en bestemt URL for den valgte repræsentation. Dette kan automatisk vælges af brugeragenten, eller brugeragenten kan præsentere brugeren for valgene, og brugeren kan direkte vælge et sådant. Mere præcist reagerer serveren med enten 300 flere valg eller 406 ikke acceptabelt (når serverdrevne kriterier for brugeragent er angivet, men serveren ikke automatisk kan foretage et valg). Desværre efterlader HTTP formatet på listen over repræsentationer og metadata sammen med udvælgelsesmekanismer uspecificerede.


Referencer

eksterne links


Denne artikel er delvist baseret på denne side , som er ophavsretligt beskyttet af Apache Foundation, men udgivet under en gratis licens.