Тасымалдауды кодтау - Chunked transfer encoding

Тасымалдауды кодтау Бұл ағынды 1.1 нұсқасында қол жетімді деректерді беру механизмі Гипермәтінді жіберу хаттамасы (HTTP). Бөлшектелген трансферттік кодтауда мәліметтер ағыны қабаттаспайтын «кесектер» қатарына бөлінеді. Бөлшектер бір-біріне тәуелсіз жіберіледі және алынады. Қазіргі уақытта өңделіп жатқан бөліктен тыс мәліметтер ағыны туралы білімдер кез келген уақытта жіберушіге де, алушыға да қажет емес.

Әрбір кесектің алдында байт өлшемі қойылады. Беріліс нөлдік ұзындықтағы кесек алынған кезде аяқталады. The кесек ішіндегі кілт сөз Трансфер-кодтау тақырып трансферті көрсету үшін қолданылады.

Бөлшектелген трансферттік кодтаудың ерте формасы 1994 жылы ұсынылған.[1] Бөлшектелген аударым кодтауына қолдау көрсетілмейді HTTP / 2, бұл мәліметтер ағынының өзіндік механизмдерін ұсынады.[2]

Негіздеме

Бөлшектелген кодтауды енгізу түрлі артықшылықтар берді:

  • Тасымалдауды кодтау серверге an қызмет көрсетуге мүмкіндік береді HTTP тұрақты қосылымы динамикалық түрде құрылған мазмұн үшін. Бұл жағдайда HTTP Content-Length тақырыбын мазмұнды және келесі HTTP сұранысын / жауабын шектеу үшін пайдалану мүмкін емес, өйткені мазмұн мөлшері әлі белгісіз. Бөлшектелген кодтаудың артықшылығы бар: тақырыпты жазбас бұрын толық мазмұнды жасаудың қажеті жоқ, өйткені ол мазмұнды бөліктер түрінде жіберуге мүмкіндік береді және контенттің аяқталғанын анық көрсетеді, осылайша келесі HTTP сұранысы / жауабы үшін қосылым қол жетімді болады.
  • Бөлшектелген кодтау жіберушіге хабарлама денесінен кейін қосымша тақырып өрістерін жіберуге мүмкіндік береді. Бұл өрістің мәндерін мазмұн жасалмайынша білуге ​​болмайтын жағдайларда, мысалы, хабарламаның мазмұнына цифрлық қолтаңба қою керек болған жағдайда маңызды. Бөлшектелген кодтаусыз, жіберуші өріс мәнін есептеп, оны мазмұннан бұрын жіберу үшін мазмұнды толығымен буферге жіберуі керек еді.

Қолданылу мүмкіндігі

HTTP протоколының 1.1-нұсқасы үшін бөлінген тасымалдау механизмі әрқашан және кез-келген жағдайда қолайлы болып саналады, тіпті егер тізімде болмаса да TE (беруді кодтау) сұраныстың тақырыбы өрісі және басқа тасымалдау механизмдерімен бірге қолданылған кезде әрдайым берілетін мәліметтерге соңғы рет қолданылуы керек және бір реттен артық болмауы керек. Бұл тасымалдауды кодтау әдісі, егер клиент TE өрісінің аргументі ретінде «тіркемелер» параметрін көрсеткен болса, соңғы бөліктен кейін қосымша нысан тақырыбының өрістерін жіберуге мүмкіндік береді. Жауаптың түпнұсқалық сервері, егер клиент TE сұранысы өрісінде «тіркемелер» параметрін көрсетпеген болса да, бірақ метамәліметтер міндетті емес болса ғана (яғни клиент алынған нысанды оларсыз пайдалана алады) ). Тіркемелерді қолданған сайын, сервер олардың аттарын Трейлер тақырыбы өрісіне жазуы керек; үш тақырып өрісінің типіне тіркеме өрісі ретінде шығуға ерекше тыйым салынады: Трансфер-кодтау, Мазмұн ұзындығы және Тіркеме.

Пішім

Егер а Трансфер-кодтау «өрісікесек«HTTP хабарламасында көрсетілген (немесе клиент жіберген сұраныс немесе серверден келген жауап), хабарламаның негізгі бөлігі анықталмаған бөліктер санынан, тоқтатылатын бөліктен, трейлерден және соңғы CRLF реттілігінен тұрады (яғни. арбаны қайтару ілесуші желілік берілім ).

Әрбір кесек саннан басталады сегіздіктер ол енгізілген деректердің а оналтылық нөмірі ASCII содан кейін қосымша параметрлер (кесінді кеңейту) және аяқталған CRLF дәйектілігі, содан кейін негізгі деректер. Бөлшек CRLF арқылы тоқтатылады.

Егер бөліктің кеңейтілуі қамтамасыз етілсе, онда оның өлшемі нүктелі үтірмен аяқталады, содан кейін олардың әрқайсысы нүктелі үтірмен бөлінген параметрлермен жалғасады. Әрбір параметр кеңейту атауы ретінде кодталады, содан кейін қосымша тең белгі және мән беріледі. Бұл параметрлерді жүгіру үшін пайдалануға болады хабарлама дайджест немесе ЭЦҚ немесе, мысалы, болжамды аударым барысын көрсету үшін.

Аяқталатын кесек - кәдімгі кесек, тек оның ұзындығы нөлге тең. Одан кейін тіркеуші жалғасады, ол нысан тақырыбының өрістерінің (мүмкін бос) тізбегінен тұрады. Әдетте, мұндай тақырып өрістері хабарламаның тақырыбында жіберіледі; дегенмен, оларды бүкіл хабарлама нысанын өңдегеннен кейін анықтау тиімдірек болуы мүмкін. Бұл жағдайда сол тақырыптарды тіркемеде жіберу пайдалы.

Тіркемелерді пайдалануды реттейтін тақырып өрістері болып табылады TE (сұрауларда қолданылады), және Тіркемелер (жауаптарда қолданылады).

Қысу арқылы қолданыңыз

HTTP серверлері жиі қолданады қысу беруді оңтайландыру, мысалы Мазмұнды кодтау: gzip немесе Мазмұнды кодтау: босату. Егер сығымдау да, топтастырылған кодтау да қосылса, онда мазмұн ағыны алдымен сығылады, содан кейін жинақталады; сондықтан кодтаудың өзі сығымдалмайды және әр бөліктегі деректер жеке сығылмайды. Содан кейін қашықтағы соңғы нүкте бөлімдерді біріктіру және нәтижені қысу арқылы ағынды декодтайды.

Мысал

Кодталған деректер

Келесі мысалда ұзындығы 4, 6 және 14 үш бөлік көрсетілген («Е» он алтылық санау). Бөлшектің өлшемі он алтылық сан түрінде, содан кейін r n жолды бөлгіш ретінде беріледі, содан кейін берілген өлшемдегі мәліметтер бөлімі беріледі.

4  r  n (жіберілетін байт) Wiki  r  n (мәліметтер) 6  r  n (жіберілетін байттар) педия  r  n (деректер) E  r  n (жіберілетін байттар)  r  n  r  nchunks.  r  n (деректер) 0  r  n (соңғы байт - 0)  r  n (соңғы хабарлама)

Ескерту: кесек өлшемі деректердің көлемін көрсетеді және артта тұрған CRLF (« r n») қоспайды. Осы нақты мысалда «in» -ден кейінгі CRLF 0xE (14) өлшеміне қарай екі октет ретінде есептеледі. Өз сызығындағы CRLF кесінді өлшеміне қарай екі октет ретінде есептеледі. «Бөлшектердің» соңындағы периодтық таңба 14-ші символ болып табылады, сондықтан бұл сол штаммдағы мәліметтердің соңғы таңбасы. Периодтан кейінгі CRLF - артта тұрған CRLF, сондықтан ол 0xE (14) өлшеміне қарай есептелмейді.

Декодталған деректер

Уикипедия.

Сондай-ақ қараңыз

Әдебиеттер тізімі

  1. ^ Connolly, Daniel (27 қыркүйек 1994). «Content-Transfer-Encoding: HTTP пакеттері». <[email protected]>. Алынған 13 қыркүйек 2013.CS1 maint: қосымша тыныс белгілері (сілтеме)
  2. ^ Бельше, Майк; Томсон, Мартин; Пион, Роберто (мамыр 2015). «Гипермәтінді жіберу протоколының 2-нұсқасы (HTTP / 2)». tools.ietf.org. Алынған 2017-11-17. HTTP / 2 хабарлама жүктемелерін тасымалдау үшін DATA жақтауларын қолданады. [RFC7230] 4.1-бөлімінде анықталған «бөлшектелген» кодтау HTTP / 2-де ҚОЛДАНЫЛМАЙДЫ