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

3 Рбтбнефтщ ртпфплпмб.

3.1 Четуйс HTTP.

HTTP йурпмшъхеф уиенх охнетбгйй фйрб "<major>.<minor>", дмс хлбъбойс четуйй ртпфплпмб. Уфтбфезйс четуйжйлбгйй ртпфплпмб ртедобъобюеоб дмс фпзп, юфпвщ рпъчпмйфш пфртбчйфема хлбъбфш жптнбф уппвэеойс й учпй урпупвопуфй рпойнбойс дмс дбмшоекыек HTTP учсъй, ртецде юен по рпмхюйф юфп-мйвп рпутедуфчпн ьфпк учсъй. Ртй дпвбчмеойй лпнрпоеофпч уппвэеойс, лпфптще ое чпъдекуфчхаф об рпчедеойе учсъй, ймй лпнрпоеофпч, лпфптще дпвбчмсафус фпмшлп л тбуыйтсенщн ъобюеойсн рпмс, опнет четуйй ое неосефус. Лпздб чоеуеооще ч ртпфплпм йънеоеойс дпвбчмсаф чпънпцопуфй, лпфптще ое йънеосаф пвэйк бмзптйфн бобмйъб уппвэеойк, оп лпфптще тбуыйтсаф уенбофйлх уппвэеойс й рпдтбъхнечбаф дпрпмойфемшоще чпънпцопуфй пфртбчйфемс, хчемйюйчбефус <Minor> опнет. Лпздб жптнбф уппвэеойс ртпфплпмб йънеосефус хчемйюйчбефус <Major> опнет.

Четуйс HTTP уппвэеойс пвпъобюбефус рпмен HTTP-version ч ретчпк уфтпле уппвэеойс.

          HTTP-Version   = "HTTP" "/" 1*DIGIT "." 1*DIGIT

Пвтбфйфе чойнбойе, юфп major й minor юйумб ДПМЦОЩ пвтбвбфщчбфшус лбл пфдемшоще гемще юйумб й юфп лбцдпе нпцеф упуфпсфш впмее юен йъ пдопк гйжтщ. Фблйн пвтбъпн, HTTP/2.4 - впмее ойълбс четуйс, юен HTTP/2.13, лпфптбс ч учпа пюетедш ойце юен HTTP/12.3. Охмй ДПМЦОЩ йзоптйтпчбфшус рпмхюбфемснй й ОЕ ДПМЦОЩ рпущмбфшус.

Ртймпцеойс, рпущмбаэйе уппвэеойс ъбртпупч ймй пфчефпч, лпфптще прйущчбеф ьфб урегйжйлбгйс, ДПМЦОЩ члмаюйфш HTTP четуйа (HTTP-version) "HTTP/1.1". Йурпмшъпчбойе ьфпзп опнетб четуйй хлбъщчбеф, юфп рпущмбаэее ртймпцеойе рп лтбкоек нете хумпчоп упчнеуфйнп у ьфпк урегйжйлбгйек.

HTTP четуйс ртймпцеойс - ьфп убнбс чщуплбс HTTP четуйс, дмс лпфптпк ртймпцеойе счмсефус рп лтбкоек нете хумпчоп упчнеуфйнщн.

Ртймпцеойс, тебмйъхаэйе ртплуй-уетчетб й ымаъщ, дпмцощ вщфш чойнбфемшощ, лпздб ретеущмбаф уппвэеойс ртпфплпмб тбъмйюощи четуйк. Обюйобс у нпнеофб, лпздб четуйс ртпфплпмб хлбъщчбеф чпънпцопуфй пфртбчйфемс, ртплуй-уетчет/ымаъ ойлпздб ОЕ ДПМЦЕО рпущмбфш уппвэеойс, четуйс лпфптщи впмшые, юен HTTP четуйс пфртбчйфемс; еумй рпмхюеоб впмее чщуплбс четуйс ъбртпуб, фп ртплуй-уетчет/ымаъ ДПМЦЕО ймй рпойъйфш четуйа ъбртпуб, пфдбч уппвэеойе пв пыйвле, ймй ретелмаюйфшус об фхооемшопе рпчедеойе. Х ъбртпупч, четуйс лпфптщи ойце, юен HTTP четуйс ртплуй-уетчетб/ымаъб НПЦОП ретед ретеущмлпк хчемйюйфш четуйа; пфчеф ртплуй-уетчетб/ымаъб об ьфпф ъбртпу ДПМЦЕО йнефш фх це убнха major четуйа, юфп й ъбртпу.

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

3.2 Хойчетубмшоще Йдеофйжйлбфптщ Теухтупч (URI).

URI йъчеуфощ рпд нопзйнй йнеобнй: WWW бдтеуб, Хойчетубмшоще Йдеофйжйлбфптщ Дплхнеофпч, Хойчетубмшоще Йдеофйжйлбфптщ Теухтупч (URI), й, ч ъблмаюеойе, лбл лпнвйобгйс Едйоппвтбъощи Йдеофйжйлбфптпч Теухтуб (Uniform Resource Locators, URL) й Едйоппвтбъощи Йнео Теухтуб (Uniform Resource Names, URN). HTTP пртедемсеф URL ртпуфп лбл уфтплх пртедемеоопзп жптнбфб, лпфптбс йдеофйжйгйтхеф - юетеъ йнс, тбурпмпцеойе, ймй мавха дтхзха ибтблфетйуфйлх - теухту.

3.2.1 Пвэйк уйофблуйу.

URI ч HTTP нпзхф ртедуфбчмсфшус ч бвупмафопк (absolute) жптне ймй пфопуйфемшоп оелпфптпк йъчеуфопк пуопчщ URI (relative), ч ъбчйуйнпуфй пф лпофелуфб йи йурпмшъпчбойс. Ьфй дче жптнщ тбъмйюбафус фен, юфп бвупмафоще URI чуездб обюйобафус у йнеой уиенщ у дчпефпюйен.

          URI         = ( absoluteURI | relativeURI ) [ "#" fragment ]

          absoluteURI = scheme ":" *( uchar | reserved )

          relativeURI = net_path | abs_path | rel_path

          net_path    = "//" net_loc [ abs_path ]
          abs_path    = "/" rel_path
          rel_path    = [ path ] [ ";" params ] [ "?" query ]

          path        = fsegment *( "/" segment )
          fsegment    = 1*pchar
          segment     = *pchar

          params      = param *( ";" param )
          param       = *( pchar | "/" )

          scheme      = 1*( ALPHA | DIGIT | "+" | "-" | "." )
          net_loc     = *( pchar | ";" | "?" )

          query       = *( uchar | reserved )
          fragment    = *( uchar | reserved )

          pchar       = uchar | ":" | "@" | "&" | "=" | "+"
          uchar       = unreserved | escape
          unreserved  = ALPHA | DIGIT | safe | extra | national

          escape      = "%" HEX HEX
          reserved    = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+"
          extra       = "!" | "*" | "'" | "(" | ")" | ","
          safe        = "$" | "-" | "_" | "."
          unsafe      = CTL | SP | <"> | "#" | "%" | "<" | ">"
          national    = <мавпк OCTET ъб йулмаюеойен ALPHA, DIGIT,
                           reserved, extra, safe, й unsafe>

Рпмоха йожптнбгйа пфопуйфемшоп уйофблуйуб й уенбофйлй URL унпфтйфе RFC 1738 [4] Й RFC 1808 [11]. Чщыехлбъбообс оптнбмшобс ъбрйуш Велхуб-Обхтб члмаюбеф обгйпобмшоще уйнчпмщ, оедпъчпмеооще ч дпрхуфйнщи URL (ьфп пртедемеоп ч RFC 1738), фбл лбл HTTP уетчетщ рпъчпмсаф йурпмшъпчбфш дмс ртедуфбчмеойс юбуфй rel_path бдтеупч обвпт оеъбтеъетчйтпчбоощи уйнчпмпч, й, умедпчбфемшоп, HTTP ртплуй-уетчетб нпзхф рпмхюбфш ъбртпущ URI, ое уппфчефуфчхаэйе RFC 1738.

Ртпфплпм HTTP ое облмбдщчбеф a priori ойлблйи пзтбойюеойк об дмйощ URI. Уетчетщ ДПМЦОЩ вщфш урпупвощ пвтбвпфбфш URI мавпзп теухтуб, лпфптщк пой пвумхцйчбаф, й йн УМЕДХЕФ вщфш ч упуфпсойй пвтбвбфщчбфш URI оепзтбойюеоопк дмйощ, еумй пой пвумхцйчбаф жптнщ, пуопчбооще об нефпде GET, лпфптще нпзхф зеоетйтпчбфш фблпк URI. Уетчетх УМЕДХЕФ чпъчтбэбфш лпд упуфпсойс 414 (URI ъбртпуб умйылпн дмйоощк, Request-URI Too Long), еумй URI впмшые, юен уетчет нпцеф пвтбвпфбфш (унпфтйфе тбъдем 10.4.15).

Пвтбфйфе чойнбойе: Уетчетщ дпмцощ вщфш пуфптпцощ у URI, лпфптще йнеаф дмйох впмее 255 вбкфпч, рпфпнх юфп оелпфптще уфбтще лмйеофщ ймй ртплуй-уетчетб ое нпзхф ртбчймшоп рпддетцйчбфш ьфй дмйощ.

3.2.2 HTTP URL.

"Http" уиенб йурпмшъхефус дмс дпуфхрб л уефечщн теухтубн ртй рпнпэй ртпфплпмб HTTP. Ьфпф тбъдем пртедемсеф уиенп-пртедемеоощк уйофблуйу й уенбофйлх дмс HTTP URL.

          http_URL       = "http:" "//" host [ ":" port ] [ abs_path ]

          host           = <дпрхуфйнпе дпнеоопе йнс нбыйощ
                            ймй IP бдтеу (ч фпюеюоп-деусфйюопк жптне),
                            лбл пртедемеоп ч тбъдеме 2.1 RFC 1123>

          port           = *DIGIT

Еумй рптф рхуф ймй ое ъбдбо - йурпмшъхефус рптф 80. Ьфп пъобюбеф, юфп йдеофйжйгйтпчбоощк теухту тбънеэео ч уетчете, пцйдбаэен TCP упедйоеойк об урегйжйгйтпчбоопн рптфе port, лпнршафетб host, й ъбртбыйчбенщк URI теухтуб - abs_path. Йурпмшъпчбойс IP бдтеупч ч URL УМЕДХЕФ йъвезбфш, лпздб ьфп чпънпцоп (унпфтйфе RFC 1900 [24]). Еумй abs_path ое ртедуфбчмео ч URL, по ДПМЦЕО тбуунбфтйчбфшус лбл "/" ртй чщюйумеойй ъбртбыйчбенпзп URI (Request-URI) теухтуб (тбъдем 5.1.2).

3.2.3 Утбчоеойе URI.

Ртй утбчоеойй дчхи URI, юфпвщ теыйфш уппфчефуфчхаф мй пой дтхз дтхзх ймй оеф, лмйеофх УМЕДХЕФ йурпмшъпчбфш юхчуфчйфемшопе л тезйуфтх рпплфефопе (octet-by-octet) утбчоеойе ьфйи URI, уп умедхаэйнй йулмаюеойснй:

Уйнчпмщ, пфмйюоще пф феи, юфп обипдсфус ч "ъбтеъетчйтпчбоощи" ("reserved") й "прбуощи" ("unsafe") обвптби (ун. тбъдем 3.2) ьлчйчбмеофощ йи лпдйтпчбойа лбл ""%" HEX HEX ".

Обртйнет умедхаэйе фтй URI ьлчйчбмеофощ:

         http://abc.com:80/~smith/home.html
         http://ABC.com/%7Esmith/home.html
         http://ABC.com:/%7esmith/home.html

3.3 Жптнбфщ дбфщ/чтенеой.

3.3.1 Рпмобс дбфб.

HTTP ртймпцеойс йуфптйюеулй дпрхулбмй фтй тбъмйюощи жптнбфб дмс ртедуфбчмеойс дбфщ/чтенеой:

      Sun, 06 Nov 1994 08:49:37 GMT  ; RFC 822, дпрпмоеоощк ч RFC 1123
      Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, ретерйубоощк лбл RFC 1036
      Sun Nov  6 08:49:37 1994       ; жптнбф asctime() ANSI C

Ретчщк жптнбф чщвтбо ч лбюеуфче уфбодбтфб Йофетоефб й ртедуфбчмсеф рпднопцеуфчп жйлуйтпчбоопк дмйощ, лбл пртедемеоп ч RFC 1123 (нпдйжйгйтпчбоопн RFC 822). Чфптпк жптнбф обипдйфус ч пвэен рпмшъпчбойй, оп пуопчбо об хуфбтечыен й рпфетсчыен уфбфху уфбодбтфб RFC 850 [12], прйущчбаэен жптнбфщ дбф, по пвмбдбеф фен оедпуфбфлпн, юфп зпд хлбъщчбефус ое ч юефщтеитбътсдопк опфбгйй. Лмйеофщ й уетчетщ HTTP/1.1, лпфптще бобмйъйтхаф ъобюеойе дбфщ, ДПМЦОЩ рпойнбфш чуе фтй жптнбфб (дмс упчнеуфйнпуфй у HTTP/1.0), оп зеоетйтпчбфш дмс ртедуфбчмеойс ъобюеойк дбф ч рпмси ъбзпмпчлб HTTP ДПМЦОЩ фпмшлп жптнбф RFC 1123 .

Пвтбфйфе чойнбойе: Рппэтсефус ртблфйлб, ртй лпфптпк рпмхюбфемй ъобюеойк дбф ъдтбчп чпуртйойнбаф ъобюеойс дбф, лпфптще, чпънпцоп, рпумбощ ое HTTP ртймпцеойснй, юфп йнееф неуфп ртй ъбзтхъле ймй тезйуфтбгйй уппвэеойк юетеъ ртплуй-уетчетб/ымаъщ л SMTP ймй NNTP.

Чуе веъ йулмаюеойк жптнбфщ HTTP дбфщ/чтенеой ДПМЦОЩ вщфш ртедуфбчмеощ ч Greenwich Mean Time (GMT). Ч ретчщи дчхи жптнбфби дбоощк жблф хлбъщчбефус члмаюеойен фтеиуйнчпмшопзп уплтбэеойс "GMT" ч лбюеуфче юбупчпзп рпсуб. Ч asctime() жптнбфе ьфп ДПМЦОП рпдтбъхнечбфшус ртй юфеойй.

          HTTP-date    = rfc1123-date | rfc850-date | asctime-date

          rfc1123-date = wkday "," SP date1 SP time SP "GMT"
          rfc850-date  = weekday "," SP date2 SP time SP "GMT"
          asctime-date = wkday SP date3 SP time SP 4DIGIT

          date1        = 2DIGIT SP month SP 4DIGIT
                         ; деош неусг зпд (обртйнет 02 Jun 1982)

          date2        = 2DIGIT "-" month "-" 2DIGIT
                         ; деош-неусг-зпд (обртнет 02-Jun-82)

          date3        = month SP ( 2DIGIT | ( SP 1DIGIT ))
                         ; неусг деош (обртйнет, Jun  2)

          time         = 2DIGIT ":" 2DIGIT ":" 2DIGIT
                         ; 00:00:00 - 23:59:59

          wkday        = "Mon" | "Tue" | "Wed"
                       | "Thu" | "Fri" | "Sat" | "Sun"

          weekday      = "Monday" | "Tuesday" | "Wednesday"
                       | "Thursday" | "Friday" | "Saturday" | "Sunday"

          month        = "Jan" | "Feb" | "Mar" | "Apr"
                       | "May" | "Jun" | "Jul" | "Aug"
                       | "Sep" | "Oct" | "Nov" | "Dec"

Пвтбфйфе чойнбойе: Ьфй фтевпчбойс - ьфп фтевпчбойс л дмс жптнбфбн дбфщ/чтенеой, лпфптще ртйнеосафус чохфтй рпфплб ртпфплпмб HTTP. Лмйеофбн й уетчетбн ое фтевхефус йурпмшъпчбфш ьфй жптнбфщ дмс ртедуфбчмеойс рпмшъпчбфема, тезйуфтбгйй ъбртпупч й ф.д.

3.3.2 Тбъопуфш уелход (delta seconds).

Оелпфптще рпмс HTTP ъбзпмпчлб рпъчпмсаф хлбъщчбфш ъобюеойс чтенеой ч чйде гемпзп юйумб уелход, ртедуфбчмеоопзп ч деусфйюопк жптне, лпфптще дпмцощ ртпкфй у фпзп нпнеофб, лбл уппвэеойе вщмп рпмхюеоп.

          delta-seconds  = 1*DIGIT

3.4 Лпдпчще фбвмйгщ (character sets).

HTTP йурпмшъхеф фп це убнпе пртедемеойе фетнйоб "лпдпчбс фбвмйгб", лпфптпе прйубоп дмс MIME:

Фетнйо "лпдпчбс фбвмйгб" йурпмшъхефус ч дбоопн дплхнеофе, юфпвщ упумбфшус об нефпд, йурпмшъхаэйк пдох ймй оеулпмшлп фбвмйг дмс ртепвтбъпчбойс рпумедпчбфемшопуфй плфефпч ч рпумедпчбфемшопуфш уйнчпмпч. Уфпйф пфнефйфш, юфп пдопъобюопе ртепвтбъпчбойе ч пвтбфопн обртбчмеойй ое фтевхефус, й юфп ое чуе уйнчпмщ нпзхф вщфш дпуфхрощ ч дбоопк лпдпчпк фбвмйге, й юфп лпдпчбс фбвмйгб нпцеф пвеуреюйчбфш впмее юен пдох рпумедпчбфемшопуфш плфефпч дмс ртедуфбчмеойс урегйжйюеулйи уйнчпмпч. Ьфп пртедемеойе дпрхулбеф тбъмйюоще чйдщ лпдйтпчбойс уйнчпмпч, пф ртпуфщи пдопфбвмйюощи пфпвтбцеойк фйрб US-ASCII дп умпцощи нефпдпч, ретелмаюбаэйи фбвмйгщ, обрпдпвйе феи, лпфптще йурпмшъхаф нефпдйлй ISO 2022. Пдоблп пртедемеойе, учсъбоопе у йнеоен лпдпчпк фбвмйгщ MIME ДПМЦОП рпмопуфша пртедемсфш пфпвтбцеойе, лпфптпе ртепвтбъхеф плфефщ ч уйнчпмщ. Ч юбуфопуфй йурпмшъпчбойе чоеыоек йожптнбгйй ртпжймйтпчбойс дмс пртедемеойс фпюопзп пфпвтбцеойс ое тбътеыбефус.

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

Лпдпчще фбвмйгщ HTTP йдеофйжйгйтхафус мелуенбнй, ое юхчуфчйфемшощнй л тезйуфтх. Рпмощк обвпт мелуен пртедемео тееуфтпн лпдпчщи фбвмйг IANA [19].

          charset = token

Ипфс HTTP рпъчпмсеф йурпмшъпчбфш ч лбюеуфче ъобюеойс charset ртпйъчпмшоха мелуенх, мавбс мелуенб, лпфптбс йнееф ртедпртедемеоопе ъобюеойе ч тееуфте лпдпчщи фбвмйг IANA, ДПМЦОБ ртедуфбчмсфш обвпт уйнчпмпч, пртедемеоощк ч дбоопн тееуфте. Ртймпцеойсн УМЕДХЕФ пзтбойюйфш йурпмшъпчбойе уйнчпмшощи обвптпч фенй, лпфптще пртедемеощ ч тееуфте IANA.

3.5 Лпдйтпчбойе упдетцйнпзп (content codings).

Ъобюеойе лпдйтпчбойс упдетцйнпзп хлбъщчбеф лблпе ртепвтбъпчбойе лпдйтпчбойс вщмп ймй вхдеф ртйнеоеоп л пв®елфх. Лпдйтпчбойе упдетцйнпзп йурпмшъхефус ртецде чуезп дмс уцбфйс ймй дтхзпзп рпмеъопзп ртепвтбъпчбойс л дплхнеофх веъ рпфетй йдеофйжйлбгйй пуопчопзп недйб фйрб й йожптнбгйй. Юбуфп, пв®елф упитбосефус ч лпдйтпчбоопк жптне, ъбфен ретедбефус, б рпфпн делпдйтхефус рпмхюбфемен.

          content-coding   = token

Чуе ъобюеойс лпдйтпчбойс упдетцйнпзп (content-coding) ое юхчуфчйфемшощ л тезйуфтх. HTTP/1.1 йурпмшъхеф ъобюеойс лпдйтпчбойс упдетцйнпзп (content-coding) ч рпмси ъбзпмпчлб Accept-Encoding (тбъдем 14.3) й Content-Encoding (тбъдем 14.12). Ипфс ъобюеойе прйущчбеф лпдйтпчбойе упдетцйнпзп, оп, юфп впмее чбцоп - поп хлбъщчбеф, лблпк неибойън делпдйтпчбойс рпфтевхефус дмс пвтбфопзп ртпгеууб.

Internet Assigned Numbers Authority (IANA) декуфчхеф лбл тееуфт дмс ъобюеойк мелуен лпдйтпчбойс упдетцйнпзп (content-coding). Ретчпобюбмшоп тееуфт упдетцбм умедхаэйе мелуенщ:

gzip
Жптнбф лпдйтпчбойс, ртпйъчпдсэйк уцбфйе жбкмб ртпзтбннпк "gzip" (GNU zip), лбл прйубоп ч RFC 1952 [25]. Ьфп жптнбф Lempel-Ziv лпдйтпчбойс (LZ77) у 32 тбътсдощн CRC.
compress
Жптнбф лпдйтпчбойс, ртпйъчпдйнщк пвэек ртпзтбннпк "compress" дмс уцбфйс UNIX жбкмпч. Ьфп жптнбф бдбрфйчопзп Lempel-Ziv-Welch лпдйтпчбойс (LZW).

Пвтбфйфе чойнбойе: Йурпмшъпчбфш объчбойс ртпзтбнн дмс йдеофйжйлбгйй жптнбфпч лпдйтпчбойс ое цембфемшоп й дпмцоп вщфш ое рпосфоп вхдхэйн лпдйтпчбойсн. Йи йурпмшъпчбойе ъдеуш пв®суосефус йуфптйюеулпк ртблфйлпк, оп фбл дембфш ое охцоп. Дмс упчнеуфйнпуфй у ртедщдхэйнй тебмйъбгйснй HTTP, ртймпцеойс дпмцощ тбуунбфтйчбфш "x-gzip" й "x-compress" лбл ьлчйчбмеофщ "gzip" й "compress" уппфчефуфчеооп.

deflate
Жптнбф zlib, пртедемеоощк ч RFC 1950 [31], ч лпнвйобгйй у неибойънпн уцбфйс "deflate", прйубоощн ч RFC 1951 [29].

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

3.6 Лпдйтпчбойе ретедбюй (Transfer Codings).

Ъобюеойс лпдйтпчбойс ретедбюй йурпмшъхафус дмс хлбъбойс ртепвтбъпчбойс лпдйтпчбойс, лпфптпе вщмп ймй дпмцоп вщфш ртйнеоеоп л фемх пв®елфб (entity-body) ч гемси збтбофйтпчбойс "веъпрбуопк ретедбюй" рп уефй. Поп пфмйюбефус пф лпдйтпчбойс упдетцйнпзп фен, юфп лпдйтпчбойе ретедбюй - ьфп учпкуфчп уппвэеойс, б ое ретчпобюбмшопзп пв®елфб.

          transfer-coding         = "chunked" | transfer-extension

          transfer-extension      = token

Чуе ъобюеойс лпдйтпчбойс ретедбюй (transfer-coding) ое юхчуфчйфемшощ л тезйуфтх. HTTP/1.1 йурпмшъхеф ъобюеойс лпдйтпчбойс ретедбюй (transfer-coding) ч рпме ъбзпмпчлб Transfer-Encoding (тбъдем 14.40).

Лпдйтпчбойс ретедбюй - ьфп бобмпзй ъобюеойк Content-Transfer-Encoding MIME, лпфптще вщмй тбътбвпфбощ дмс пвеуреюеойс веъпрбуопк ретедбюй дчпйюощи дбоощи ртй йурпмшъпчбойй 7-вйфопзп пвумхцйчбойс ретедбюй. Пдоблп веъпрбуощк фтбоурптф йнееф дтхзпе ртедобъобюеойе дмс юйуфп 8-вйфопзп ртпфплпмб ретедбюй. Ч HTTP едйоуфчеобс прбуобс ибтблфетйуфйлб фемб уппвэеойс чщъчбоб умпцопуфша пртедемеойс фпюопк дмйощ фемб уппвэеойс (тбъдем 7.2.2), ймй цембойен ыйжтпчбфш дбооще ртй рпмшъпчбойй пвэедпуфхрощн фтбоурптфпн.

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

       Chunked-Body   = *chunk
                        "0" CRLF
                        footer
                        CRLF

       chunk          = chunk-size [ chunk-ext ] CRLF
                        chunk-data CRLF

       hex-no-zero    = <HEX ъб йулмаюеойен "0">

       chunk-size     = hex-no-zero *HEX
       chunk-ext      = *( ";" chunk-ext-name [ "=" chunk-ext-value ] )
       chunk-ext-name = token
       chunk-ext-val  = token | quoted-string
       chunk-data     = chunk-size(OCTET)

       footer         = *entity-header

Лпдйтпчбойе рп лхулбн (chunked encoding) плбоюйчбефус лхулпн охмечпзп тбънетб, умедхаэйн ъб ъбчетыйфемен, плбоюйчбаэйнус рхуфпк уфтплпк. Гемш ъбчетыйфемс упуфпйф ч ьжжелфйчопн нефпде пвеуреюеойс йожптнбгйй пв пв®елфе, лпфптщк узеоетйтпчбо дйобнйюеулй; ртймпцеойс ОЕ ДПМЦОЩ рпущмбфш ч ъбчетыйфеме рпмс ъбзпмпчлб, лпфптще счоп ое ртедобъобюеощ дмс йурпмшъпчбойс ч ъбчетыйфеме, фблйе лбл Content-MD5 ймй вхдхэйе тбуыйтеойс HTTP дмс гйжтпчщи рпдрйуек й дтхзйи чпънпцопуфек.

Ртйнетощк ртпгеуу делпдйтпчбойс Chunked-Body ртедуфбчмео ч ртймпцеойй 19.4.6.

Чуе HTTP/1.1 ртймпцеойс ДПМЦОЩ вщфш ч упуфпсойй рпмхюбфш й делпдйтпчбфш лпдйтпчбойе ретедбюй "рп лхулбн" ("chunked" transfer coding), й ДПМЦОЩ йзоптйтпчбфш тбуыйтеойс лпдйтпчбойс ретедбюй, лпфптще пой ое рпойнбаф. Уетчетх, лпфптщк рпмхюйм фемп пв®елфб уп ъобюеойен лпдйтпчбойс ретедбюй, лпфптпе по ое рпойнбеф, УМЕДХЕФ чпъчтбфйфш пфчеф у лпдпн 501 (Ое тебмйъпчбоп, Not Implemented) й тбъптчбфш упедйоеойе. Уетчет ОЕ ДПМЦЕО рпущмбфш рпмс лпдйтпчбойс ретедбюй (transfer-coding) HTTP/1.0 лмйеофбн.

3.7 Недйб фйрщ (Media Types).

HTTP йурпмшъхеф Недйб Фйрщ Йофетоефб (Internet Media Types) ч рпмси ъбзпмпчлб Content-Type (тбъдем 14.18) й Accept (тбъдем 14.1) дмс пвеуреюеойс пфлтщфпк й тбуыйтсенпк фйрйъбгйй дбоощи й пвухцдеойс фйрпч.

          media-type     = type "/" subtype *( ";" parameter )
          type           = token
          subtype        = token

Рбтбнефтщ нпзхф умедпчбфш ъб type/subtype ч жптне рбт бфтйвхф/ъобюеойе (attribute/value).

          parameter      = attribute "=" value
          attribute      = token
          value          = token | quoted-string

Фйр, рпдфйр, й йнеоб бфтйвхфпч й рбтбнефтпч ое юхчуфчйфемшощ л тезйуфтх. Ъобюеойс рбтбнефтпч нпзхф вщфш юхчуфчйфемшощнй л тезйуфтх, оп нпзхф вщфш й ое юхчуфчйфемшощ, ч ъбчйуйнпуфй пф уенбофйлй йнеой рбтбнефтб. Мйоекощк ртпвем (LWS) ОЕ ДПМЦЕО йурпмшъпчбфшус нецдх фйрпн й рпдфйрпн, нецдх бфтйвхфпн й ъобюеойен. Бзеофщ рпмшъпчбфемек, тбурпъобаэйе недйб фйрщ, ДПМЦОЩ пвтбвбфщчбфш (ймй рпдзпфбчмйчбфш дмс пвтбвпфлй мавщнй чоеыойнй ртймпцеойснй) рбтбнефтщ дмс феи фйрпч MIME, лпфптще прйубощ, й уппвэбфш рпмшъпчбфема п пвобтхцеоощи ртпвменби.

Пвтбфйфе чойнбойе: Оелпфптще уфбтще HTTP ртймпцеойс ое тбурпъобаф рбтбнефтщ недйб фйрпч. Ртй рпущмле дбоощи л фблйн HTTP ртймпцеойсн тебмйъбгйй дпмцощ йурпмшъпчбфш рбтбнефтщ недйб фйрпч фпмшлп лпздб ьфп фтевхефус рп пртедемеойа фйрб/рпдфйрб.

Ъобюеойс недйб-фйрпч тезйуфтйтхафус Internet Assigned Number Authority (IANA). Ртпгеуу тезйуфтбгйй недйб фйрб пртедемео ч RFC 2048 [17]. Йурпмшъпчбойе ое ъбтезйуфтйтпчбоощи недйб фйрпч ччпдйф ч ъбвмхцдеойе.

3.7.1 Лбопойъбгйс й ртедпртедемеооще ъобюеойс фйрб text.

Недйб фйрщ Йофетоефб ъбтезйуфтйтпчбощ ч лбопойюеулпк жптне. Чппвэе, фемп пв®елфб, ретедбчбенпе HTTP уппвэеойен, ДПМЦОП вщфш ртедуфбчмеоп ч уппфчефуфчхаэек лбопойюеулйпк жптне дп ретедбюй; йулмаюеойе упуфбчмсаф фйрщ "text", пртедемсенще ч умедхаэен бвъбге.

Ч лбопойюеулпк жптне недйб рпдфйрщ фйрб "text" йурпмшъхаф CRLF ч лбюеуфче нефлй лпогб уфтплй. HTTP пумбвмсеф ьфп фтевпчбойе й рпъчпмсеф ретедбчбфш фелуф тбънеюеоощк фблйн пвтбъпн, юфп едеойюоще CR ймй LF нпзхф вщфш нефлбнй лпогб уфтплй, ртбчдб ьфп ртбчймп дпмцоп вщфш чщрпмоеоп дмс чуезп фемб пв®елфб (entity-body). HTTP ртймпцеойс ДПМЦОЩ чпуртйойнбфш CRLF, ртпуфп CR, й ртпуфп LF лбл ртедуфбчмеойе лпогб уфтплй ч фелуфпчщи фйрби, ретедбоощи рп HTTP. Лтпне фпзп, еумй фелуф ртедуфбчмсефус ч лпдпчпк фбвмйге, лпфптбс ое йурпмшъхеф плфефщ 13 й 10 дмс CR й LF уппфчефуфчеооп, юфп йнееф неуфп ч оелпфптщи нопзпвбкфпчщи лпдпчщи фбвмйгби, фп HTTP рпъчпмсеф йурпмшъпчбфш мавще рпумедпчбфемшопуфй плфефпч, пртедемеооще ьфйн обвптпн уйнчпмпч дмс ртедуфбчмеойс ьлчйчбмеофпч CR й LF ч лбюеуфче лпдб лпогб уфтплй. Ьфб зйвлпуфш ч пфопыеойй лпогпч уфтпл ртйнеойнб фпмшлп л фелуфпчщн фйрбн ч феме пв®елфб; ртпуфп CR ймй ртпуфп LF ОЕ ДПМЦОЩ ъбнеосфш CRLF чохфтй мавпк хртбчмсаэек уфтхлфхтщ HTTP (фйрб рпмс ъбзпмпчлб й тбъдемйфемек фйрб multipart).

Еумй фемп пв®елфб лпдйтхефус ртй рпнпэй Content-Encoding, фп пуопчоще дбооще ДПМЦОЩ вщфш ч пртедемеоопк чщые жптне дп лпдйтпчбойс.

Рбтбнефт "charset" йурпмшъхефус у оелпфптщнй недйб фйрбнй дмс хлбъбойс лпдпчпк фбвмйгщ (тбъдем 3.4), йурпмшъхенпк дмс ртедуфбчмеойс дбоощи. Еумй рбтбнефт "charset" ое хлбъбо пфртбчйфемен, фп ртй рпмхюеойй рп HTTP недйб рпдфйрщ фйрб "text" йнеаф ъобюеойе "charset", рп хнпмюбойа тбчопе "ISO-8859-1". Дбооще ч лпдпчщи фбвмйгби ймй йи рпднопцеуфчби, пфмйюощи пф "ISO-8859-1" ДПМЦОЩ вщфш рпнеюеощ уппфчефуфчхаэйн ъобюеойен "charset".

Оелпфптпе ртпзтбннопе пвеуреюеойе HTTP/1.0 йофетртефйтпчбмп ъбзпмпчпл Content-Type веъ рбтбнефтб "charset" оертбчймшоп, лбл пъобюбаэее "дпмцео ртедрпмпцйфш рпмхюбфемш". Пфртбчйфемй, цембаэйе ртедхунпфтефш фблпе рпчедеойе НПЗХФ члмаюбфш рбтбнефт "charset" дбце лпздб charset тбчео ISO-8859-1 й ДПМЦОЩ удембфш ьфп, еумй йъчеуфоп, юфп ьфп ое ъбрхфбеф рпмхюбфемс.

Л упцбмеойа, оелпфптще уфбтще HTTP/1.0 лмйеофщ ое тбвпфбмй ртбчймшоп у пртедемеойен рбтбнефтб "charset". HTTP/1.1 рпмхюбфемй ДПМЦОЩ пфдбчбфш ртйптйфеф нефле "charset", рпуфбчмеоопк пфртбчйфемен; й фе бзеофщ рпмшъпчбфемек, лпфптще йнеаф чпънпцопуфш "ртедрпмпцйфш" charset ДПМЦОЩ ртй ретчпобюбмшопн пфпвтбцеойй дплхнеофб йурпмшъпчбфш charset йъ рпмс content-type, еумй пой рпддетцйчбаф фблпк charset, б ъбфен йурпмшъпчбфш упвуфчеооще хуфбопчлй.

3.7.2 Фйрщ Multipart.

MIME ртедхунбфтйчбеф тсд фйрпч "multipart" - жптнйтхаэйи рблеф йъ пдопзп ймй оеулпмшлйи пв®елфпч чохфтй фемб пдопзп уппвэеойс. Чуе фйрщ mulptipart йурпмшъхаф пвэйк уйофблуйу, пртедемеощк ч MIME [7], й ДПМЦОЩ упдетцбфш тбъдемйфемшощк рбтбнефт юбуфша ъобюеойс недйб фйрб. Фемп уппвэеойс - убнпуфпсфемшощк ьменеоф ртпфплпмб й, умедпчбфемшоп, ДПМЦОП йурпмшъпчбфш фпмшлп УRLF дмс ртедуфбчмеойс лпогпч уфтпл нецдх юбуфснй фемб (body-parts). Ч пфмйюйе пф MIME, плпоюбойе мавпзп multipart уппвэеойс ДПМЦОП вщфш рхуфщн; HTTP ртймпцеойс ОЕ ДПМЦОЩ ретедбчбфш плпоюбойе (дбце еумй ретчпобюбмшощк multipart упдетцйф ъблмаюеойе).

Ч HTTP юбуфй фемб (body-parts) фйрб multipart НПЗХФ упдетцбфш рпмс ъбзпмпчлб, лпфптще счмсафус ъобюбэйнй ч ртйноеойй л ьфпк юбуфй. Рпме ъбзпмпчлб Content-Location (тбъдем 14.15) УМЕДХЕФ члмаюбфш ч юбуфш фемб (body-part) лбцдпзп члмаюеоопзп пв®елфб, лпфптщк нпцеф вщфш йдеофйжйгйтпчбо URL.

Чппвэе зпчптс, HTTP бзеофх рпмшъпчбфемс УМЕДХЕФ умедпчбфш фблпнх це ймй рпдпвопнх рпчедеойа, лпфптпнх умедпчбм вщ MIME бзеоф рпмшъпчбфемс рпуме рпмхюеойс фйрб multipart. Еумй ртймпцеойе рпмхюбеф оеъбтезйуфтйтпчбоощк рпдфйр multipart, поп ДПМЦОП пвтбвбфщчбфш езп лбл рпдфйр "multipart/mixed".

Пвтбфйфе чойнбойе: фйр "multipart/form-data" вщм урегйбмшоп пртедемео дмс ретедбюй дбоощи жптнщ, рпдипдсэйи дмс пвтбвпфлй нефпдпн ъбртпуб POST, юфп прйубоп ч RFC 1867 [15].

3.8 Мелуенщ ртпзтбнн (Product Tokens).

Мелуенщ ртпзтбнн йурпмшъхафус, юфпвщ пвеуреюйфш лпннхойлбгйпоощн ртймпцеойсн чпънпцопуфш йдеофйжйгйтпчбфш уевс объчбойен й четуйек ртпзтбннопзп пвеуреюеойс. Впмшыйоуфчп рпмек, йурпмшъхаэйи мелуенщ ртпзтбнн фблце дпрхулбеф ретеюйумеойе рпдртпзтбнн, лпфптще жптнйтхаф ъобюйфемшоха юбуфш ртймпцеойс, й лпфптще ретеюйумсафус юетеъ ртпвем. Ч уппфчефуфчйй у упзмбыеойен, рпдртпзтбннщ ретеюйумсафус ч рптсдле йи ъобюеойс дмс йдеофйжйлбгйй ртймпцеойс.

          product         = token ["/" product-version]
          product-version = token

Ртйнетщ:

          User-Agent: CERN-LineMode/2.15 libwww/2.17b3
          Server: Apache/0.8.4

Мелуенщ ртпзтбнн дпмцощ вщфш лптпфлйнй й рп ухфй - йурпмшъпчбойе йи дмс телмбнщ ймй дтхзпк оеухэеуфчеоопк йожптнбгйй пдопъобюоп ъбртеэеоп. Ипфс ч мелуене product-version нпцеф чуфтеюбфшус мавпк уйнчпм, чуе це ее умедхеф йурпмшъпчбфш фпмшлп дмс йдеофйжйлбфптб четуйй (фп еуфш, рпумедпчбфемшощн четуйсн пдопк й фпк це ртпзтбннщ УМЕДХЕФ йнефш пфмйюйс фпмшлп ч юбуфй product-version мелуенщ product.

3.9 Лбюеуфчеооще ъобюеойс (Quality Values).

Пвухцдеойе упдетцйнпзп HTTP (тбъдем 12) йурпмшъхеф лптпфлйе юйумб "у рмбчбаэек фпюлпк" дмс хлбъбойс пфопуйфемшопк чбцопуфй ("чеуб") тбъмйюощи пзпчптеоощи рбтбнефтпч. Чеу - ьфп оптнбмйъпчбопе чеэеуфчеоопе юйумп ч дйбрбъпое пф 0 дп 1, зде 0 - нйойнбмшопе, б 1 - нблуйнбмшопе ъобюеойе. HTTP/1.1 ртймпцеойс ОЕ ДПМЦОЩ зеоетйтпчбфш впмее фтеи гйжт рпуме деусфйюопк фпюлй. Рпмшъпчбфемшулйн лпожйзхтбгйсн ьфйи ъобюеойк УМЕДХЕФ фблце пзтбойюйчбфшус ьфйн тецйнпн.

          qvalue         = ( "0" [ "." 0*3DIGIT ] )
                         | ( "1" [ "." 0*3("0") ] )

"Лбюеуфчеооще ъобюеойс" - ое лпттелфопе объчбойе, фбл лбл ьфй ъобюеойс ртпуфп ртедуфбчмсаф пфопыеойе уойцеойс ртпйъчпдйфемшопуфй л цембфемшопнх лбюеуфчх.

3.10 Нефлй същлпч (Language Tags).

Нефлб същлб йдеофйжйгйтхеф еуфеуфчеоощк същл: тбъзпчптощк, рйушнеоощк, ймй дтхзпк йурпмшъхенщк мадшнй дмс пвнеоб йожптнбгнек у дтхзйнй мадшнй. Нбыйооще същлй счмсафус йулмаюеойен. HTTP йурпмшъхеф нефлй същлб чохфтй рпмек Accept-Language й Content-Language.

Уйофблуйу й ъбрйуш HTTP нефпл същлб фблйе це, лбл пртедемсенще RFC 1766 [1]. Ч теъане, нефлб същлб упуфпйф йъ пдопк ймй оеулпмшлйи юбуфек: нефлб ретчйюопзп същлб й, чпънпцоп рхуфпк, тсд рпдюйоеоощи нефпл:

           language-tag  = primary-tag *( "-" subtag )

           primary-tag   = 1*8ALPHA
           subtag        = 1*8ALPHA

Чохфтй нефлй ое дпрхуфйн ртпвем й чуе нефлй ое юхчуфчйфемшощ л тезйуфтх. Ртпуфтбоуфчп йнео нефпл същлб хртбчмсефус IANA. Обртйнет нефлй упдетцбф:

          en, en-US, en-cockney, i-cherokee, x-pig-latin

Мавбс дчхиуйнчпмшобс ретчйюобс нефлб счмсефус нефлпк бввтечебфхтщ същлб ISO 639, б мавбс дчхиуйнчпмшобс рпдюйоеообс нефлб счмсефус нефлпк лпдб уфтбощ ISO 3166. (Рпумедойе фтй нефлй йъ чщыеретеюйумеоощи - ое ъбтезйуфтйтпчбооще нефлй; чуе, лтпне рпумедоек - ртйнетщ нефпл, лпфптще нпзмй вщ вщфш ъбтезйуфтйтпчбощ ч вхдхэен.)

3.11 Нефлй пв®елфпч (Entity Tags).

Нефлй пв®елфпч йурпмшъхафус дмс утбчоеойс дчхи ймй впмее пв®елфпч пф пдопзп й фпзп це ъбртпыеоопзп теухтуб. HTTP/1.1 йурпмшъхеф нефлй пв®елфб ч рпмси ъбзпмпчлб ETag (тбъдем 14.20), If-Match (тбъдем 14.25), If-None-Match (тбъдем 14.26), й If-Range (тбъдем 14.27). Пртедемеойе фпзп, лбл пой йурпмшъхафус й утбчойчбафус ч лбюеуфче нефпл ртпчетлй льыб обипдйфус ч тбъдеме 13.3.3. Нефлб пв®елфб упуфпйф йъ оертпътбюопк гйфйтхенпк уфтплй (opaque quoted string), чпънпцоп ртедчбтеоопк йодйлбфптпн умбвпуфй (weakness indicator).

         entity-tag = [ weak ] opaque-tag

         weak       = "W/"
         opaque-tag = quoted-string

"Уймшобс нефлб пв®елфб" ("strong entity tag") нпцеф вщфш тбъдемеоб дчхнс пв®елфбнй теухтуб, фпмшлп еумй пой рпплфефоп ьлчйчбмеофощ.

"Умбвбс нефлб пв®елфб" ("weak entity tag"), пвпъобюсенбс ртежйлупн "W/", нпцеф вщфш тбъдемеоб дчхнс пв®елфбнй теухтуб фпмшлп еумй пв®елфщ ьлчйчбмеофощ й нпзмй вщ ъбнеосфш дтхз дтхзб веъ ъобюйфемшопзп йънеоеойс ч уенбофйле. Умбвбс нефлб пв®елфб нпцеф йурпмшъпчбфшус фпмшлп дмс умбвпзп утбчоеойс.

Нефлб пв®елфб ДПМЦОБ вщфш хойлбмшоб утедй чуеи четуйк чуеи пв®елфпч, учсъбоощи у лполтефощн теухтупн. Дбоопе ъобюеойе нефлй пв®елфб нпцеф йурпмшъпчбфшус дмс пв®елфпч, рпмхюеоощи ъбртпубнй тбъмйюощи URI веъ ртедрпмпцеойс ьлчйчбмеофопуфй ьфйи пв®елфпч.

3.12 Едеойгщ йънетеойс дйбрбъпопч (Range Units).

HTTP/1.1 рпъчпмсеф лмйеофх ъбртбыйчбфш фпмшлп юбуфш пв®елфб. HTTP/1.1 йурпмшъхеф едеойгщ йънетеойс дйбрбъпопч ч рпмси ъбзпмпчлб Range (тбъдем 14.36) й Content-Range (тбъдем 14.17). Пв®елф нпцеф вщфш тбъвйф об юбуфй уппфчефуфчеооп тбъмйюощн уфтхлфхтощн нпдхмсн.

         range-unit       = bytes-unit | other-range-unit

         bytes-unit       = "bytes"
         other-range-unit = token

Едйоуфчеобс едеойгб йънетеойс дйбрбъпопч, пртедемеообс ч HTTP/1.1 - ьфп "bytes". Тебмйъбгйй HTTP/1.1 нпзхф йзоптйтпчбфш дйбрбъпощ, пртедемеооще у йурпмшъпчбойен дтхзйи едеойг йънетеойс. HTTP/1.1 вщм тбътбвпфбо, юфпвщ дпрхулбфш тебмйъбгйй ртймпцеойк, лпфптще ое ъбчйусф пф ъобойс дйбрбъпопч.


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


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