Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 11671|Odpoveď: 1

Dĺžka obsahu protokolu Http

[Kopírovať odkaz]
Zverejnené 24.9.2019 o 16:43:20 | | | |
predhovor

HTTP protokol je jedným z najdôležitejších protokolov na internete, hoci sa zdá jednoduchý, v praxi často naráža na problémy a my sme sa s ním stretli niekoľkokrát. Sú tam dlhé spojenia a parsovanie paketov. O HTTP protokole nemôžete nič vedieť, musíte mu dôkladne rozumieť. Preto som napísal túto sériu, aby som sa podelil o problémy a skúsenosti s HTTP protokolom.



HTTP protokol má hlavičku a telo pre požiadavky aj odpovede, pričom telo je zdroj, ktorý chcete získať, napríklad html stránka, jpeg obrázok a hlavička sa používa na vytvorenie určitých konvencií. Napríklad klient a server sa dohodnú na niektorých prenosových formátoch, klient najprv získa hlavičku, pozná nejaké informácie o formáte a potom začne čítať jadro prenosu.

Klient: Accept-Encoding:gzip (skomprimuj mi to, používam traffic, najprv si to stiahni a potom pomaly rozbaľ)

Server 1: Content-Encoding: null (No Content-Encoding header.) Nedávam kompresiu, CPU nie je voľný, chceš ho)

Server 2: Content-Encoding:gzip (ušetrí vám prevádzku, skomprimuje ju)
Klient: Pripojenie: keep-alive (Veľký brat, konečne sme vytvorili TCP pripojenie, použijeme ho nabudúce)

Server 1: Pripojenie: udržiavaj nažive (nie je ľahké, pokračuj v používaní)

Server 2: Pripojenie: uzavreté (Kto ho s vami naďalej používa, náš TCP je jednorazový a nabudúce ho budeme musieť znovu pripojiť)
HTTP protokol nemá tri handshake a keď klient požiada server o zdroje, serverová strana zvíťazí. Existujú aj niektoré hlavičky, ktoré nemajú proces vyjednávania, ale server priamo hovorí klientovi, čo má robiť. Napríklad vyššie uvedený obsah-dĺžka je to, čo server klientovi hovorí, aká je veľkosť tela. Ale! Server vám nemusí vedieť vopred presne povedať, aké veľké telo je. Server musí najprv napísať hlavičku a potom telo, ak chcete napísať hlavný prípad do hlavičky, musíte vopred poznať veľkosť tela. Ak je telo dynamicky generované, server dokončí a začne písať hlavičku, čo si vyžaduje veľa dodatočnej režijnej záťaže, takže v hlavičke nemusí byť dĺžka obsahu.

Ako teda klient pozná veľkosť tela? Server vám to povie tromi spôsobmi.


1. Server už pozná veľkosť zdroja a informuje vás cez hlavičku dĺžky obsahu.

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

Transfer-Encoding: null


2. Server nemôže vopred poznať veľkosť zdroja, alebo nie je ochotný vynaložiť zdroje na výpočet veľkosti zdroja vopred, preto pridá hlavičku k http odpovednej správe nazvanú Transfer-Encoding:chunked, čo znamená blokový prenos. Každý blok používa pevný formát, s veľkosťou bloku vpredu, dátami za ním a posledným blokom s veľkosťou 0. Týmto spôsobom, keď klient analyzuje, musí venovať pozornosť odstraňovaniu niektorých zbytočných polí.

Content-Length:null

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


3. Server nepozná veľkosť zdroja a nepodporuje režim prenosu v častiach, takže neexistuje ani hlavička dĺžky obsahu, ani hlavička kódovania prenosu. V tomto momente musí byť hlavička vrátená serverom blízko.

Content-Length:null

Transfer-Encoding:null

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





Predchádzajúci:Podrobná interpretácia dĺžky obsahu v HTTP protokole
Budúci:HTTP protokol Transfer-Encoding (rozdelený na kúsky)
Zverejnené 2019-9-24 17:16:57 |
Ďakujem, prenajímateľ
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com