объбд | упдетцбойе | чретед

12 Пвухцдеойе упдетцйнпзп (Content Negotiation).

Впмшыйоуфчп HTTP пфчефпч члмаюбаф пв®елф, лпфптщк упдетцйф йожптнбгйа, ртедобъобюеооха дмс йофетртефбгйй рпмшъпчбфемен. Еуфеуфчеооп цембойе пвеуреюйфш рпмшъпчбфемс "мхюыйн дпуфхрощн" пв®елфпн, уппфчефуфчхаэйн ъбртпух. Л упцбмеойа дмс уетчетпч й льыек, ое чуе рпмшъпчбфемй йнеаф пдйооблпчще ртедрпюфеойс, й ое чуе бзеофщ рпмшъпчбфемс пдйоблпчп урпупвощ л чйъхбмйъбгйй чуеи фйрпч пв®елфпч. Рп ьфпк ртйюйое, HTTP йнееф утедуфчб дмс оеулпмшлйи неибойънпч "пвухцдеойс упдетцйнпзп" - ртпгеууб чщвптб убнпзп мхюыезп ртедуфбчмеойс дмс дбоопзп пфчефб, лпздб дпуфхроп оеулпмшлп ртедуфбчмеойк.

Пвтбфйфе чойнбойе: Ьфп ое чщъщчбефус "пвухцдеойе жптнбфб" ("format negotiation"), рпфпнх юфп бмшфетобфйчоще ртедуфбчмеойс нпзхф йнефш пдйооблпчщк недйб фйр, оп йурпмшъпчбфш тбъмйюоще чпънпцопуфй ьфпзп фйрб, йнефш тбъоще същлй й ф.д.

Мавпк пфчеф, упдетцбэйк фемп пв®елфб (entity-body) НПЦЕФ вщфш фенпк пвухцдеойс, члмаюбс пыйвпюоще пфчефщ.

Йнеафус дчб чйдб пвухцдеойс упдетцйнпзп, лпфптще чпънпцощ ч HTTP: хртбчмсенпе уетчетпн й хртбчмсенпе бзеофпн пвухцдеойе. Ьфй дчб чйдб пвухцдеойс оеъбчйуйнщ, й, фблйн пвтбъпн, нпзхф йурпмшъпчбфшус пфдемшоп ймй чнеуфе. Пдйо нефпд йурпмшъпчбойс йи чнеуфе, хрпнйобенщк лбл ртпътбюопе пвухцдеойе, ртпйуипдйф, лпздб льы йурпмшъхеф йожптнбгйа пвухцдеойс, хртбчмсенпзп бзеофпн, ртедпуфбчмсс ее ретчпобюбмшопнх уетчетх, дмс пвеуреюеойс хртбчмсенпзп уетчетпн пвухцдеойс ртй рпумедхаэйи ъбртпуби.

12.1 Хртбчмсенпе уетчетпн пвухцдеойе.

Пвухцдеойе объщчбефус хртбчмсенщн уетчетпн, еумй чщвпт убнпзп мхюыезп ртедуфбчмеойс дмс пфчефб ртпйъчедео бмзптйфнпн, тбънеэеоощн об уетчете. Чщвпт пуопчбо об дпуфхрощи ртедуфбчмеойси пфчефб (пой нпзхф тбъмйюбфшус рп оеулпмшлйн ибтблфетйуфйлбн; обртйнет същлх, лпдйтпчбойа упдетцйнпзп (content-coding), й ф.д.) й упдетцбойй урегйжйюеулйи рпмек ъбзпмпчлб ч уппвэеойй ъбртпуб, ймй об дтхзпк йожптнбгйй, йнеаэек пфопыеойе л ъбртпух (фблпк лбл уефечпк бдтеу лмйеофб).

Хртбчмсенпе уетчетпн пвухцдеойе чщзпдоп, лпздб бмзптйфн чщвптб йъ юйумб дпуфхрощи ртедуфбчмеойк фтхдоп прйубфш бзеофх рпмшъпчбфемс, ймй лпздб уетчет цембеф рпумбфш "мхюыее ртедрпмпцеойе" лмйеофх пдопчтенеооп у ретчщн пфчефпн (обдесуш йъвецбфш ъбдетцлй ретеущмлй фхдб й пвтбфоп рпумедхаэезп ъбртпуб, еумй "мхюыее ртедрпмпцеойе" хуфтпйф рпмшъпчбфемс). Юфпвщ хмхюыйфш ртедрпмпцеойе уетчетб, бзеоф рпмшъпчбфемс НПЦЕФ члмаюбфш рпмс ъбзпмпчлб ъбртпуб (Accept, Accept-Language, Accept-Encoding, й ф.д.), лпфптще прйущчбаф ртедрпюфйфемшощк пфчеф.

Хртбчмсенпе уетчетпн пвухцдеойе йнееф оедпуфбфлй:

  1. Уетчет ое нпцеф фпюоп пртедемйфш, юфп нпзмп вщ вщфш "убнщн мхюыйн" дмс дбоопзп рпмшъпчбфемс, фбл лбл ьфп фтевхеф рпмопзп ъобойс, лбл чпънпцопуфек бзеофб рпмшъпчбфемс, фбл й гемек йурпмшъпчбойс пфчефб (обртйнет, рпмшъпчбфемш ипюеф ртпунбфтйчбфш езп об ьлтбое ймй реюбфбфш об вхнбзе?).
  2. Обмйюйе прйубойс чпънпцопуфек бзеофб рпмшъпчбфемс ч лбцдпн ъбртпуе нпцеф вщфш пюеош оеьжжелфйчощн (ртй хумпчйй, юфп фпмшлп оевпмшыпк ртпгеоф пфчефпч йнееф оеулпмшлп ртедуфбчмеойк) й рпфеогйбмшоп обтхыбеф уелтефопуфш рпмшъпчбфемс.
  3. Поп хумпцосеф тебмйъбгйа ретчпобюбмшопзп уетчетб й бмзптйфнпч зеоетбгйй пфчефпч об ъбртпу.
  4. Поп нпцеф пзтбойюйчбфш урпупвопуфш пвэезп льыб йурпмшъпчбфш пдйо й фпф це пфчеф дмс ъбртпупч оеулпмшлйи рпмшъпчбфемек.

HTTP/1.1 члмаюбеф умедхаэйе рпмс ъбзпмпчлб ъбртпуб (request-header), лпфптще пвеуреюйчбаф хртбчмсенпе уетчетпн пвухцдеойе рпутедуфчпн прйубойс чпънпцопуфек бзеофб рпмшъпчбфемс й ртедрпюфеойк убнпзп рпмшъпчбфемс: Accept (тбъдем 14.1), Accept-Charset (тбъдем 14.2), Accept-Encoding (тбъдем 14.3), Accept-Language (тбъдем 14.4), and User-Agent (тбъдем 14.42). Пдоблп ретчпобюбмшощк уетчет ое пзтбойюео ьфйн й НПЦЕФ йънеойфш пфчеф, пуопчщчбсуш об мавпн бурелфе ъбртпуб, члмаюбс йожптнбгйа, лпфптбс ое упдетцйфус ч рпмси ъбзпмпчлб ъбртпуб ймй йожптнбгйа йъ тбуыйтеоощи рпмек ъбзпмпчлб, ое пртедемеоощи ч ьфпк урегйжйлбгйй.

Ретчпобюбмшощк уетчет HTTP/1.1 ДПМЦЕО члмаюбфш уппфчефуфчхаэее рпме ъбзпмпчлб Vary (тбъдем 14.43) ч мавпк льыйтхенщк пфчеф, пуопчбоощк об хртбчмснпн уетчетпн пвухцдеойй. Рпме ъбзпмпчлб Vary прйущчбеф ибтблфетйуфйлй, лпфптще нпзхф неосфшус ч пфчефе (фп еуфш ибтблфетйуфйлй, упзмбуоп лпфптщн ретчпобюбмшощк уетчет чщвйтбеф "обймхюыйк" пфчеф йъ оеулпмшлйи ртедуфбчмеойк).

Пвэйе HTTP/1.1 льый ДПМЦОЩ тбурпъобфш рпме ъбзпмпчлб Vary, еумй по ртйухфуфчхеф ч пфчефе, й пфчеюбфш фтевпчбойсн, прйубоощн ч тбъдеме 13.6, лпфптщк прйущчбеф чъбйнпдекуфчйс нецдх льыйтпчбойен й пвухцдеойен упдетцйнпзп.

12.2 Хртбчмсенпе бзеофпн пвухцдеойе.

Ртй хртбчмсенпн бзеофпн пвухцдеойй, чщвпт мхюыезп ртедуфбчмеойс пфчефб чщрпмосефус бзеофпн рпмшъпчбфемс рпуме рпмхюеойс обюбмшопзп пфчефб ретчпобюбмшопзп уетчетб. Чщвпт пуопчбо об урйуле дпуфхрощи ртедуфбчмеойк пфчефб, члмаюеоопн ч рпмс ъбзпмпчлб (ьфб урегйжйлбгйс теъетчйтхеф йнс рпмс Alternates, лбл прйубоп ч ртймпцеойй 19.6.2.1) ймй фемп пв®елфб обюбмшопзп пфчефб. Лбцдпе ртедуфбчмеойе йдеофйжйгйтхефус упвуфчеоощн URI. Чщвпт ртедуфбчмеойс нпцеф чщрпмосфшус бчфпнбфйюеулй (еумй бзеоф рпмшъпчбфемс урпупвео ьфп удембфш) ймй чтхюоха рпмшъпчбфемен йъ узеоетйтпчбоопзп (чпънпцоп зйретфелуфпчпзп) неоа.

Хртбчмсенпе бзеофпн пвухцдеойе чщзпдоп, лпздб пфчеф чбтшйтхефус рп пвэейурпмшъхенщн ибтблфетйуфйлбн (фблйн лбл фйр, същл, ймй лпдйтпчбойе), лпздб ретчпобюбмшощк уетчет ое урпупвео пртедемйфш чпънпцопуфй бзеофб рпмшъпчбфемс рхфен йуумедпчбойс ъбртпуб, й пвщюоп ртй йурпмшъпчбойй пвэйи льыек дмс тбуртедемеойс обзтхълй об уетчет й хнеошыеойс йурпмшъпчбойс уефй.

Хртбчмсенпе бзеофпн пвухцдеойе уфтбдбеф фен, юфп дмс рпмхюеойс убнпзп мхюыезп бмшфетобфйчопзп ртедуфбчмеойс фтевхефус чфптпк ъбртпу. Ьфпф чфптпк ъбртпу ьжжелфйчео фпмшлп фпздб, лпздб йурпмшъхефус льыйтпчбойе. Лтпне фпзп, ьфб урегйжйлбгйс ое пртедемсеф ойлблпзп неибойънб дмс пвеуреюеойс бчфпнбфйюеулпзп чщвптб, ипфс фблце й ое ртедпфчтбэбеф тбътбвпфлх фблпзп неибойънб ч лбюеуфче тбуыйтеойс й йурпмшъпчбойс ч HTTP/1.1.

HTTP/1.1 пртедемсеф лпдщ упуфпсойс 300 (Нопцеуфчеоощк чщвпт, Multiple Choices) й 406 (Ое ртйенмен, Not Acceptable) дмс пвеуреюеойс хртбчмсенпзп бзеофпн пвухцдеойс, лпздб уетчет ое цембеф ймй ое урпупвео пвеуреюйфш йънеоеойе пфчефб, йурпмшъхс хртбчмсенпе уетчетпн пвухцдеойе.

12.3 Ртпътбюопе пвухцдеойе.

Ртпътбюопе пвухцдеойе - ьфп лпнвйобгйс хртбчмсенпзп уетчетпн й хртбчмсенпзп бзеофпн пвухцдеойс. Лпздб льы пвеуреюео урйулпн дпуфхрощи ртедуфбчмеойк пфчефб (лбл ртй хртбчмсенпн бзеофпн пвухцдеойй) й йънеосаэйеус ибтблфетйуфйлй рпмопуфша рпосфщ льыен, фпздб по урпупвео чщрпмосфш хртбчмсенпе уетчетпн пвухцдеойе рпумедхаэйи ъбртпупч ьфпзп це теухтуб пф йнеой ретчпобюбмшопзп уетчетб.

Ртпътбюопе пвухцдеойе йнееф фп ртейнхэеуфчп, юфп тбвпфб рп пвухцдеойа тбуртедемсефус. Лпздб льы урпупвео ртбчймшоп ртедрпмпцйфш охцощк пфчеф уплтбэбефус тбвпфб, лпфптбс тбошые фтевпчбмбуш пф ретчпобюбмшопзп уетчетб й ое ртпйуипдйф ъбдетцлй чфптпзп ъбртпуб, лбл ртй хртбчмсенпн бзеофпн пвухцдеойй.

Ьфб урегйжйлбгйс ое пртедемсеф ойлблпзп неибойънб ртпътбюопзп пвухцдеойс, ипфс фблце й ое ртедпфчтбэбеф тбътбвпфлх фблпзп неибойънб ч лбюеуфче тбуыйтеойс й йурпмшъпчбойс ч HTTP/1.1. HTTP/1.1 льы, чщрпмосаэйк ртпътбюопе пвухцдеойе ДПМЦЕО члмаюбфш рпме ъбзпмпчлб Vary (пртедемсаэее рбтбнефтщ, лпфптще нпзхф чбтшйтпчбфшус) ч пфчеф, еумй по льыйтхен, юфпвщ збтбофйтпчбфш ртбчймшоха йофетртефбгйа чуенй HTTP/1.1 лмйеофбнй. Йожптнбгйа хртбчмсенпзп бзеофпн пвухцдеойс, ртедуфбчмеооха ретчпобюбмшощн уетчетпн, УМЕДХЕФ члмаюбфш ч пфчеф ртй ртпътбюопн пвухцдеойй.


Copyright  ©  1998 Alex Simonoff (http://www.omsk.com/Leshik/), All Rights Reserved.


объбд | упдетцбойе | чретед