1. Bakgrunn:
- Vedvarende tilkoblingsproblemer: For ikke-persistente tilkoblinger kan nettleseren definere grensene for den forespørrende eller svarende enheten ut fra om forbindelsen er nede eller ikke; For kontinuerlige forbindelser fungerer åpenbart ikke denne tilnærmingen. Noen ganger, selv om jeg har sendt alle dataene, vet ikke nettleseren om det kommer inn nye data på den åpne tilkoblingen, så den bare venter.
- Løs med innholdslengde: Beregn entitetslengden og fortell den andre parten gjennom hodet. Nettleseren kan se at responsenheten er over ut fra lengdeinformasjonen til Innhold-Lengde
- Nytt problem med innholdslengde: Siden Innhold-lengde-feltet virkelig må reflektere entitetslengden, er lengden ukjent for dynamisk generert innhold inntil innholdet er opprettet. På dette tidspunktet, for å få lengden nøyaktig, kan du bare åpne en stor nok buffer og vente til alt innholdet er generert før du beregner. Dette krever imidlertid mer minneoverhead på den ene siden, og på den andre siden vil det få klienten til å vente lenger.
- Vi trenger en ny mekanisme som ikke er avhengig av lengden på headeren og kjenner grensene for entiteter – Transfer-Encoding: chunked.
2. Overføringskoding (chunked)
- Transfer-Encoding er et HTTP-headerfelt (response header-felt), som bokstavelig talt betyr «overføringskoding». Den nyeste HTTP-spesifikasjonen definerer kun én type kodingstransport: chunked.
- Chunked transfer-koding er en dataoverføringsmekanisme i Hypertext Transfer Protocol (HTTP) som gjør det mulig å dele HTTP-data sendt av en webserver til klienten opp i flere deler. Blokktransportkoding er kun tilgjengelig i HTTP-protokoll versjon 1.1 (HTTP/1.1).
- Data deles opp i en serie biter og sendes i én eller flere biter slik at serveren kan sende data uten å vite den totale størrelsen på det sendte innholdet på forhånd.
Spesifikke metoder
- Etter å ha lagt til Transfer-Encoding: chunked i headeren, betyr det at pakken er chunket. I dette tilfellet må entitetene i pakken sendes i en serie av chunks i stedet.
- Hver chunk inneholder den heksadesimale lengdeverdien og dataene, og lengdeverdien er eksklusiv for én linje, og lengden inkluderer ikke CRLF på slutten av den, eller CRLF på slutten av de chunkede dataene.
- Den siste chunk-lengdeverdien må være 0, og de tilsvarende chunk-dataene har ikke noe innhold, noe som indikerer slutten på enheten.
asp.net Kjernetestkode:
|