Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 11671|Odgovoriti: 1

Vsebinska dolžina http protokola

[Kopiraj povezavo]
Objavljeno 24. 9. 2019 ob 16:43:20 | | | |
predgovor

HTTP protokol je eden najpomembnejših protokolov na internetu, čeprav se zdi preprost, a v praksi pogosto naleti na težave, s katerimi smo se že večkrat srečali. Obstajajo dolge povezave in razčlenjevanje paketov. O HTTP protokolu ne moreš vedeti ničesar, moraš ga temeljito razumeti. Zato sem napisal to serijo, da delim težave in izkušnje z HTTP protokolom.



HTTP protokol ima glavo in telo tako za zahteve kot za pakete odgovora, telo pa je vir, ki ga želite dobiti, kot so html stran, jpeg slika, glava pa se uporablja za določene konvencije. Na primer, odjemalec in strežnik se dogovorita o nekaterih formatih prenosa, odjemalec najprej dobi glavo, pozna nekaj informacij o formatu in nato začne brati jedro.

Odjemalec: Accept-Encoding:gzip (stisni zame, uporabljam promet, najprej prenesi in nato počasi razpakiraj)

Server 1: Vsebinsko kodiranje: null (brez vsebinskega kodiranja glave). Ne dajem kompresije, procesor ni brezplačen, ali ga želiš)

Strežnik 2: Content-Encoding:gzip (shrani promet zate, stisni ga)
Odjemalec: povezava: keep-alive (Starejši brat, končno smo vzpostavili TCP povezavo, naslednjič jo bomo uporabili)

Strežnik 1: Povezava: ohrani (ni lahko, nadaljuj z uporabo)

Strežnik 2: Povezava: zaprta (Kdor ga še uporablja z vami, je naš TCP enkraten, naslednjič ga bomo morali ponovno vzpostaviti)
HTTP protokol nima treh rokov, in ko odjemalec zahteva vire od strežnika, prevlada strežniška stran. Obstajajo tudi nekatere glave, ki nimajo postopka pogajanja, vendar strežnik neposredno pove odjemalcu, kaj naj stori. Na primer, zgornji Content-Length je tisto, kar strežnik sporoča odjemalcu, kako veliko je telo. Toda! Natakar vam morda vnaprej ne bo znal natančno povedati, kako veliko je telo. Strežnik mora najprej napisati glavo, nato telo, če želite v glavo zapisati glavo, morate vnaprej poznati velikost telesa. Če je telo dinamično generirano, strežnik zaključi in nato začne pisati glavo, kar zahteva veliko dodatnega obremenitve, zato morda v glavi ne bo dolžine vsebine.

Kako torej klient ve velikost telesa? Strežnik ti pove na tri načine.


1. Strežnik že pozna velikost vira in vam sporoči preko glave dolžine vsebine.

Content-Length:1076(body的大小是1076B,你读取1076B就可以完成任务了)

Transfer-Encoding: null


2. Strežnik ne more vnaprej poznati velikosti vira ali pa ni pripravljen porabiti virov za izračun velikosti vira vnaprej, zato doda glavo k http odgovornemu sporočilu z imenom Transfer-Encoding:chunked, kar pomeni prenos bloka. Vsak blok uporablja fiksno obliko, pri čemer je velikost bloka spredaj, podatki za njim in nato zadnji blok velikosti 0. Na ta način mora odjemalec pri razčlenjevanju posvetiti pozornost odstranjevanju nekaterih neuporabnih polj.

Content-Length:null

Transfer-Encoding:chunked (接下来的body我要一块一块的传,每一块开始是这一块的大小,等我传到大小为0的块时,就没了)


3. Strežnik ne pozna velikosti vira in ne podpira načina prenosa z delčki, zato ni niti glave dolžine vsebine niti glave prenosnega kodiranja. V tem trenutku mora biti glava, ki jo strežnik vrne, zaprta.

Content-Length:null

Transfer-Encoding:null

Connection:close(我不知道大小,我也用不了chunked,啥时候我关了tcp连接,就说明传输结束了)





Prejšnji:Podrobna interpretacija dolžine vsebine v HTTP protokolu
Naslednji:HTTP protokol Transfer-Encoding (razdeljen na dele)
Objavljeno 24. 9. 2019 ob 17:16:57 |
Hvala, najemodajalec
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com