1. Baggrund:
- Vedvarende forbindelsesproblemer: For ikke-persistente forbindelser kan browseren definere grænserne for den ansendende eller svarende enhed ud fra, om forbindelsen er nede eller ej; For kontinuerlige forbindelser virker denne tilgang åbenlyst ikke. Nogle gange, selvom jeg har sendt alle dataene, ved browseren ikke, om der kommer nye data ind på den åbne forbindelse, så den venter bare.
- Løs med indholdslængde: Beregn entitetslængden og fortæl den anden part gennem hovedet. Browseren kan se, at responsenheden er over, ud fra længdeinformationen for Indhold-Længde
- Nyt problem med indholdslængde: Da feltet Indholdslængde virkelig skal afspejle entitetens længde, er længden ukendt for dynamisk genereret indhold, indtil indholdet oprettes. På nuværende tidspunkt kan du for at få længden nøjagtigt kun åbne en stor nok buffer og vente på, at alt indholdet er genereret, før du beregner. Dette kræver dog mere hukommelsesoverhead på den ene side, og på den anden side vil det få klienten til at vente længere.
- Vi har brug for en ny mekanisme, der ikke er afhængig af headerens længde og kender grænserne for entiteter - Transfer-Encoding: chunked.
2. Overførselskodning (chunket)
- Transfer-Encoding er et HTTP-headerfelt (response header-felt), som bogstaveligt betyder "transfer encoding". Den nyeste HTTP-specifikation definerer kun én type kodningstransport: chunked.
- Chunked transfer encoding er en dataoverførselsmekanisme i Hypertext Transfer Protocol (HTTP), som gør det muligt at opdele HTTP-data sendt af en webserver til klienten i flere dele. Bloktransportkodning er kun tilgængelig i HTTP-protokol version 1.1 (HTTP/1.1).
- Data opdeles i en række bidder og sendes i en eller flere bidder, så serveren kan sende data uden at kende den samlede størrelse af det sendte indhold på forhånd.
Specifikke metoder
- Efter at have tilføjet Transfer-Encoding: chunked til headeren, betyder det, at pakken er chunked. I dette tilfælde skal enhederne i pakken transmitteres i en række chunks i stedet.
- Hver chunk indeholder hexadecimale længdeværdi og data, og længdeværdien er eksklusiv for én linje, og længden inkluderer ikke CRLF i slutningen af den, ej heller CRLF i slutningen af de bidte data.
- Den sidste chunk-længdeværdi skal være 0, og de tilsvarende chunk-data har intet indhold, hvilket indikerer slutningen af entiteten.
asp.net Core testkode:
|