1. Ozadje:
- Vztrajne težave s povezavo: Pri netrajnih povezavah lahko brskalnik določi meje entitete, ki zahteva ali odgovori, glede na to, ali je povezava prekinjena ali ne; Pri neprekinjenih povezavah ta pristop očitno ne deluje. Včasih, čeprav sem poslal vse podatke, brskalnik ne ve, ali bodo na odprti povezavi prihajali novi podatki, zato preprosto čaka.
- Reši z dolžino vsebine: Izračunaj dolžino entitete in drugi strani povej preko glave. Brskalnik lahko ugotovi, da je entiteta odgovora over glede na dolžino vsebine
- Nova težava z dolžino vsebine: Ker mora polje Vsebina-dolžina resnično odražati dolžino entitete, dolžina za dinamično generirano vsebino ni znana, dokler vsebina ni ustvarjena. Trenutno, da natančno določite dolžino, lahko odprete le dovolj velik medpomnilnik in počakate, da se vsa vsebina ustvari, preden začnete izračunavati. Vendar to zahteva več pomnilniškega bremena na eni strani, po drugi strani pa bo odjemalec dlje čakal.
- Potrebujemo nov mehanizem, ki ne temelji na dolžini glave in pozna meje entitet – Transfer-Encoding: chunked.
2. Prenosno-kodiranje (razdeljeno)
- Transfer-Encoding je polje HTTP glave (polje glave odziva), kar dobesedno pomeni "kodiranje prenosa". Najnovejša HTTP specifikacija definira le eno vrsto kodirnega transporta: delno (chunked).
- Kodiranje prenosa v delih je mehanizem za prenos podatkov v protokolu Hypertext Transfer Protocol (HTTP), ki omogoča, da se HTTP podatki, ki jih spletni strežnik pošlje odjemalcu, razdelijo na več delov. Kodiranje s transportom blokov je na voljo le v različici HTTP protokola 1.1 (HTTP/1.1).
- Podatki se razdelijo na serijo kosov in pošljejo v enem ali več delih, da lahko strežnik pošilja podatke, ne da bi vnaprej poznal skupno velikost poslane vsebine.
Specifične metode
- Po dodajanju Transfer-Encoding: v glavo pomeni, da je paket razdeljen na dele. V tem primeru je treba entitete v paketu prenesti v seriji kosov.
- Vsak del vsebuje šestnajstiško vrednost dolžine in podatke, pri čemer je vrednost dolžine omejena na eno vrstico, dolžina pa ne vključuje CRLF na koncu in ne CRLF na koncu razdeljenih podatkov.
- Zadnja vrednost dolžine kosa mora biti 0, ustrezni podatki o kosu pa nimajo vsebine, kar označuje konec entitete.
asp.net Osnovna testna koda:
|