1. Vispārīga informācija
- Pastāvīgas savienojuma problēmas: nepastāvīgiem savienojumiem pārlūkprogramma var definēt pieprasījuma vai atbildes entītijas robežas pēc tā, vai savienojums ir pārtraukts; Nepārtrauktiem savienojumiem šī pieeja acīmredzami nedarbojas. Dažreiz, lai gan esmu nosūtījis visus datus, pārlūkprogramma nezina, vai atvērtajā savienojumā ienāks jauni dati, tāpēc tā vienkārši gaida.
- Atrisināt ar satura garumu: aprēķiniet entītijas garumu un pastāstiet otrai pusei caur galvu. Pārlūkprogramma var noteikt, ka atbildes entītija ir beigusies pēc satura garuma informācijas
- Jauna problēma ar satura garumu: Tā kā laukam Content-Length patiesi jāatspoguļo entītijas garums, dinamiski ģenerēta satura garums nav zināms, kamēr saturs nav izveidots. Šobrīd, lai precīzi iegūtu garumu, varat atvērt tikai pietiekami lielu buferi un gaidīt, līdz viss saturs tiks ģenerēts pirms aprēķināšanas. Tomēr, no vienas puses, tas prasa vairāk atmiņas pieskaitāmās izmaksas, un, no otras puses, tas liks klientam gaidīt ilgāk.
- Mums ir nepieciešams jauns mehānisms, kas nepaļaujas uz galvenes garumu un zina entītiju robežas - Transfer-Encoding: chunked.
2. Pārsūtīšanas kodēšana (sadalīta)
- Pārsūtīšanas kodējums ir HTTP galvenes lauks (atbildes galvenes lauks), kas burtiski nozīmē "pārsūtīšanas kodējums". Jaunākā HTTP specifikācija definē tikai vienu kodējuma transporta veidu: fragmentu.
- Fragmentu pārsūtīšanas kodējums ir datu pārsūtīšanas mehānisms hiperteksta pārsūtīšanas protokolā (HTTP), kas ļauj sadalīt HTTP datus, ko tīmekļa serveris nosūta klientam, vairākās daļās. Bloku transporta kodējums ir pieejams tikai HTTP protokola versijā 1.1 (HTTP/1.1).
- Dati tiek sadalīti vairākos gabalos un nosūtīti vienā vai vairākos gabalos, lai serveris varētu nosūtīt datus, iepriekš nezinot nosūtītā satura kopējo lielumu.
Īpašas metodes
- Pēc pārsūtīšanas kodēšanas: pievienošanas galvenei, tas nozīmē, ka pakete ir sadalīta. Šajā gadījumā paketes entītijas ir jāpārsūta vairākos gabalos.
- Katrs gabals satur heksadecimālo garuma vērtību un datus, un garuma vērtība ir ekskluzīva vienai rindai, un garums neietver CRLF tās beigās, ne CRLF sadalīto datu beigās.
- Pēdējai gabala garuma vērtībai jābūt 0, un atbilstošajiem gabala datiem nav satura, kas norāda entītijas beigas.
asp.net Core testa kods:
|