See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 11671|Vastuse: 1

Http-protokolli sisupikkus

[Kopeeri link]
Postitatud 2019-9-24 16:43:20 | | | |
eessõna

HTTP protokoll on üks olulisemaid protokolle internetis, kuigi see tundub lihtne, kuid praktikas tekib tihti probleeme ning oleme sellega korduvalt kokku puutunud. Seal on pikad ühendused ja pakettide parsimine. Sa ei saa HTTP protokollist midagi teada, pead seda põhjalikult mõistma. Seetõttu kirjutasin selle sarja, et jagada HTTP protokolli probleeme ja kogemusi.



HTTP protokollil on päis ja keha nii päringu kui vastuse paketi jaoks ning keha on ressurss, mida soovid saada, näiteks html-leht, jpeg-pilt, ja päist kasutatakse teatud konventsioonide loomiseks. Näiteks klient ja server lepivad mõnes edastusvormingus kokku ning klient saab esmalt päise, teab vormingu infot ja hakkab siis keha lugema.

Klient: Accept-Encoding:gzip (tihenda see mulle, kasutan liiklust, laadi esmalt alla ja siis aeglaselt lahti)

Server 1: sisukodeerimine: null (puudub sisukodeerimise päis.) Ma ei anna kompressiooni, protsessor pole tasuta, kas sa tahad seda)

Server 2: Content-Encoding:gzip (salvestan liikluse, tihendan selle)
Klient: Ühendus: keep-alive (Suur vend, lõpuks ehitasime TCP-ühenduse, kasutame seda järgmisel korral)

Server 1: Ühendus: keep-alive (pole lihtne, jätka kasutamist)

Server 2: Ühendus: suletud (Kes iganes seda sinuga edasi kasutab, meie TCP on ühekordne ja peame järgmisel korral uuesti ühenduma)
HTTP protokollil ei ole kolme käepigistust ning kui klient küsib serverilt ressursse, jääb serveri pool peale. On ka päiseid, millel pole läbirääkimisprotsessi, kuid server ütleb kliendile otse, mida teha. Näiteks ülaltoodud sisupikkus näitab, kui suur server kliendile ütleb, kui suur keha on. Aga! Teenindaja ei pruugi sulle ette öelda, kui suur keha täpselt on. Server peab esmalt kirjutama päise ja siis keha, kui tahad kirjutada keha juhtumi päisesse, pead eelnevalt keha suurust teadma. Kui keha on dünaamiliselt genereeritud, lõpetab server ja hakkab päist kirjutama, mis nõuab palju lisakoormust, seega ei pruugi päises olla sisupikkust.

Kuidas siis klient teab keha suurust? Server ütleb seda kolmel viisil.


1. Server teab juba ressursi suurust ja annab sulle infot sisupikkuse päise kaudu.

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

Transfer-Encoding: null


2. Server ei saa ressursi suurust ette teada või ei soovi ressursse kulutada ressursi suuruse ettearvutamiseks, seega lisab ta http-vastuse sõnumile päise nimega Transfer-Encoding:chunked, mis tähendab plokiülekannet. Iga plokk kasutab fikseeritud vormingut: ploki suurus ees on, andmed selle taga ja viimane plokk suurusega 0. Nii peab klient parsimisel tähelepanu pöörama mõnede kasutute väljade eemaldamisele.

Content-Length:null

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


3. Server ei tea ressursi suurust ega toeta chunked edastusrežiimi, seega ei ole olemas ei sisupikkuse päist ega ülekande-kodeerimispäist. Sel hetkel peab serveri poolt tagastatav päis olema lähedal.

Content-Length:null

Transfer-Encoding:null

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





Eelmine:Sisupikkuse detailne tõlgendus HTTP protokollis
Järgmine:HTTP protokolli ülekande-kodeerimine (killustatud)
Postitatud 2019-9-24 17:16:57 |
Aitäh, üürileandja
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com