Chunked transfer kodlash - Chunked transfer encoding

Chunked transfer kodlash a oqim 1.1-versiyasida mavjud bo'lgan ma'lumotlar uzatish mexanizmi Gipermatn uzatish protokoli (HTTP). Uzatilgan uzatishni kodlashda ma'lumotlar oqimi bir-birining ustiga chiqmaydigan "bo'laklar" qatoriga bo'linadi. Parchalar bir-biridan mustaqil ravishda yuboriladi va qabul qilinadi. Hozirgi vaqtda qayta ishlanadigan qismdan tashqarida ma'lumotlar oqimi haqida hech qanday ma'lumot har qanday vaqtda yuboruvchi va qabul qiluvchi uchun zarur emas.

Har bir bo'lakdan oldin uning hajmi bayt bilan belgilanadi. Uzatilish nol uzunlikdagi bo'lakni olganda tugaydi. The parchalangan ichida kalit so'z Transfer-kodlash sarlavha uzatilgan uzatishni ko'rsatish uchun ishlatiladi.

Chunked transfer kodlashning dastlabki shakli 1994 yilda taklif qilingan.[1] Chunked transfer kodlashda qo'llab-quvvatlanmaydi HTTP / 2, bu ma'lumotlarni uzatish uchun o'z mexanizmlarini taqdim etadi.[2]

Mantiqiy asos

Kodlangan kodlashni joriy qilish turli xil imtiyozlarni taqdim etdi:

  • Chunked transfer kodlash serverga an HTTP doimiy ulanish dinamik ravishda yaratilgan tarkib uchun. Bunday holda, HTTP Content-Length sarlavhasi tarkibni va keyingi HTTP so'rovini / javobini chegaralash uchun ishlatilishi mumkin emas, chunki tarkib hajmi hali ma'lum emas. Chunked kodlash, sarlavhani yozishdan oldin to'liq tarkibni yaratish kerak emasligi foydasiga ega, chunki tarkibni tarkibida qism sifatida uzatilishi va kontentning tugashi to'g'risida aniq signal berib, ulanishni keyingi HTTP so'rovi / javobi uchun taqdim etadi.
  • Chunked kodlash jo'natuvchiga xabar tanasidan keyin qo'shimcha sarlavha maydonlarini yuborish imkonini beradi. Bu maydonning qiymatlarini tarkib ishlab chiqarilguncha bilish mumkin bo'lmagan holatlarda, masalan, xabar mazmuni raqamli imzolanishi kerak bo'lgan hollarda muhimdir. Chiqib ketadigan kodlashsiz, jo'natuvchi maydon qiymatini hisoblash va tarkibdan oldin yuborish uchun tarkibni to'liq bo'lguncha buferlashi kerak edi.

Amaliyligi

HTTP protokolining 1.1-versiyasi uchun ajratilgan uzatish mexanizmi har doim va baribir maqbul hisoblanadi, hattoki TE (uzatishni kodlash) so'rov sarlavhasi maydoni va boshqa uzatish mexanizmlari bilan foydalanilganda, har doim uzatilgan ma'lumotlarga oxirgi marta qo'llanilishi kerak va hech qachon bir martadan ortiq bo'lmaydi. Ushbu uzatishni kodlash usuli, shuningdek, mijoz "treylerlar" parametrini TE maydonining argumenti sifatida ko'rsatgan bo'lsa, qo'shimcha qism sarlavhasi maydonlarini oxirgi qismdan keyin yuborishga imkon beradi. Javobning kelib chiqishi serveri, shuningdek, mijoz "so'rovlar" maydonida "treylerlar" parametrini ko'rsatmagan bo'lsa ham, metama'lumotlar ixtiyoriy bo'lgan taqdirda ham (ya'ni mijoz qabul qilingan ob'ektdan ularsiz foydalanishi mumkin) qo'shimcha ob'ekt treylerlarini yuborishga qaror qilishi mumkin. ). Treylerlardan foydalanilganda, server o'zlarining nomlarini Treyler sarlavhasi maydoniga kiritishi kerak; uchta sarlavha maydonchasining treyler maydonchasi sifatida ko'rinishi taqiqlanadi: Transfer-kodlash, Tarkib uzunligi va Treyler.

Formatlash

Agar a Transfer-kodlash "qiymatiga ega maydonparchalangan"HTTP xabarida ko'rsatilgan (yoki mijoz tomonidan yuborilgan so'rov yoki serverdan kelgan javob), xabarning asosiy qismi aniqlanmagan sonli qismlar, tugatuvchi qism, treyler va yakuniy CRLF ketma-ketligidan iborat (ya'ni vagonni qaytarish dan so'ng chiziqli ozuqa ).

Har bir bo'lak soni bilan boshlanadi oktetlar u joylashtirilgan ma'lumotlarning o'n oltinchi raqam in ASCII keyin ixtiyoriy parametrlar (qismni kengaytirish) va tugatilgan CRLF ketma-ketligi, so'ngra qismli ma'lumotlar. Parcha CRLF tomonidan bekor qilinadi.

Agar qismning kengaytmalari taqdim etilsa, parcha kattaligi nuqta-vergul bilan tugaydi va undan keyin parametrlar, har biri ham vergul bilan chegaralanadi. Har bir parametr kengaytma nomi sifatida kodlanadi va undan keyin ixtiyoriy tenglik belgisi va qiymati qo'shiladi. Ushbu parametrlar ishlash uchun ishlatilishi mumkin Xabar hazm qilish yoki elektron raqamli imzo yoki, masalan, o'tkazmaning taxminiy rivojlanishini ko'rsatish uchun.

Tugatuvchi qism odatiy qismdir, faqat uning uzunligi nolga teng. Undan keyin treyler keladi, u sub'ektning sarlavha maydonlarining (ehtimol bo'sh) ketma-ketligidan iborat. Odatda, bunday sarlavha maydonlari xabarning sarlavhasida yuboriladi; ammo, ularni butun xabar ob'ektini qayta ishlagandan so'ng aniqlash samaraliroq bo'lishi mumkin. Bunday holda, ushbu sarlavhalarni treylerga yuborish foydalidir.

Fragmanlardan foydalanishni tartibga soluvchi sarlavha maydonlari TE (so'rovlarda ishlatiladi) va Tirkamalar (javoblarda ishlatiladi).

Siqish bilan foydalaning

HTTP serverlari ko'pincha foydalanadi siqilish uzatishni optimallashtirish uchun, masalan Tarkibni kodlash: gzip yoki Tarkibni kodlash: tushirish. Agar ikkala siqish va birlashtirilgan kodlash yoqilgan bo'lsa, unda kontent oqimi avval siqiladi, so'ngra qismlanadi; shuning uchun kodlashning o'zi siqilmaydi va har bir qismdagi ma'lumotlar alohida siqilmaydi. Keyin masofaviy so'nggi nuqta qismlarni birlashtirib, natijani siqish orqali oqimni dekodlaydi.

Misol

Kodlangan ma'lumotlar

Quyidagi misolda 4, 6 va 14 uzunlikdagi uchta qism ko'rsatilgan ("E" o'naltılık). Tarkib hajmi o'n oltinchi raqam sifatida, so'ngra r n qator ajratuvchisi sifatida, so'ngra berilgan hajmdagi ma'lumotlarning bir qismi sifatida uzatiladi.

4  r  n (yuborish baytlari) Wiki  r  n (ma'lumotlar) 6  r  n (yuborish baytlari) pedia  r  n (ma'lumotlar) E  r  n (yuborish baytlari)  r  da n  r  nchunks.  r  n (ma'lumotlar) 0  r  n (yakuniy bayt - 0)  r  n (yakuniy xabar)

Izoh: qism hajmi ma'lumotlar hajmini bildiradi va oxirgi CRLF (" r n") ni chiqarib tashlaydi. Ushbu aniq misolda "in" dan keyingi CRLF, 0xE (14) kattalikka qarab ikki oktet sifatida hisoblanadi. O'z satridagi CRLF, shuningdek, qismning kattaligiga qarab ikki oktet sifatida hisoblanadi. "Chunks" ning oxiridagi davr belgisi 14-belgi, shuning uchun bu ushbu qismdagi so'nggi ma'lumot belgisidir. Davrdan keyingi CRLF - bu oxirgi CRLF, shuning uchun u 0xE (14) kattalikka qarab hisoblanmaydi.

Shifrlangan ma'lumotlar

Vikipediya.

Shuningdek qarang

Adabiyotlar

  1. ^ Connolly, Daniel (27 sentyabr 1994). "Tarkibni uzatish-kodlash: HTTP uchun paketlar". <[email protected]>. Olingan 13 sentyabr 2013.CS1 maint: qo'shimcha tinish belgilari (havola)
  2. ^ Belshe, Mayk; Tomson, Martin; Peon, Roberto (may, 2015). "Gipermatnli uzatish protokolining 2-versiyasi (HTTP / 2)". tools.ietf.org. Olingan 2017-11-17. HTTP / 2 xabarlarning foydali yuklarini tashish uchun DATA freymlaridan foydalanadi. [RFC7230] ning 4.1-qismida belgilangan "chunked" transfer kodlashi HTTP / 2 da ishlatilmasligi kerak