Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 9827|Atsakyti: 0

HTTP protokolo perdavimas-kodavimas (fragmentas)

[Kopijuoti nuorodą]
Paskelbta 2019-09-24 18:07:57 | | | |
1. Pagrindiniai faktai

  • Nuolatinės ryšio problemos: nenuolatinių ryšių atveju naršyklė gali apibrėžti užklausos arba atsakymo objekto ribas pagal tai, ar ryšys neveikia, ar ne; Nuolatiniams ryšiams šis metodas akivaizdžiai neveikia. Kartais, net jei išsiunčiau visus duomenis, naršyklė nežino, ar bus naujų duomenų apie atvirą ryšį, todėl tiesiog laukia.
  • Išspręskite naudodami turinio ilgį: apskaičiuokite objekto ilgį ir pasakykite kitai šaliai per galvą. Naršyklė gali nustatyti, kad atsakymo objektas baigėsi pagal turinio ilgio informaciją
  • Nauja turinio ilgio problema: Kadangi turinio ilgio laukas turi iš tikrųjų atspindėti objekto ilgį, dinamiškai sugeneruoto turinio ilgis nežinomas, kol turinys nebus sukurtas. Šiuo metu, norėdami tiksliai gauti ilgį, prieš skaičiuodami galite atidaryti tik pakankamai didelį buferį ir palaukti, kol bus sugeneruotas visas turinys. Tačiau, viena vertus, tam reikia daugiau atminties pridėtinių išlaidų, kita vertus, klientas lauks ilgiau.
  • Mums reikia naujo mechanizmo, kuris nepasikliautų antraštės ilgiu ir žinotų objektų ribas - Transfer-Encoding: chunked.

2. Perdavimo kodavimas (fragmentais)

  • Transfer-Encoding yra HTTP antraštės laukas (atsakymo antraštės laukas), kuris pažodžiui reiškia "perdavimo kodavimas". Naujausioje HTTP specifikacijoje apibrėžiamas tik vienas kodavimo transportavimo tipas: fragmentas.
  • Fragmentinis perdavimo kodavimas yra duomenų perdavimo mechanizmas hiperteksto perdavimo protokole (HTTP), leidžiantis padalyti HTTP duomenis, kuriuos žiniatinklio serveris siunčia klientui, į kelias dalis. Blokų transportavimo kodavimas galimas tik HTTP protokolo 1.1 versijoje (HTTP/1.1).
  • Duomenys suskaidomi į keletą dalių ir siunčiami į vieną ar daugiau dalių, kad serveris galėtų siųsti duomenis iš anksto nežinodamas bendro išsiųsto turinio dydžio.


Konkretūs metodai

  • Pridėjus Transfer-Encoding: chunked į antraštę, tai reiškia, kad paketas yra padalintas. Tokiu atveju paketo subjektai turi būti perduodami dalimis.
  • Kiekviename gabale yra šešioliktainė ilgio reikšmė ir duomenys, o ilgio reikšmė yra išskirtinė vienai eilutei, o ilgis neapima CRLF jos pabaigoje ir CRLF duomenų pabaigoje.
  • Paskutinė segmento ilgio reikšmė turi būti 0, o atitinkami segmento duomenys neturi turinio, nurodančio objekto pabaigą.




asp.net Pagrindinis bandymo kodas:







Ankstesnis:Http protokolo turinio ilgis
Kitą:Trys veiksniai, dėl kurių nebenaudoju "Chrome"
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com