Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 11671|Svar: 1

Innehållslängd för Http-protokollet

[Kopiera länk]
Publicerad 2019-9-24 16:43:20 | | | |
förord

HTTP-protokollet är ett av de viktigaste protokollen på Internet, även om det verkar enkelt, men i praktiken stöter det ofta på problem, och vi har stött på det flera gånger. Det finns långa anslutningar och paketparsing. Du kan inte veta något om HTTP-protokollet, du måste förstå det grundligt. Så jag skrev den här serien för att dela problemen och erfarenheterna med HTTP-protokollet.



HTTP-protokollet har en header och en body för både förfrågnings- och svarspaket, och body är resursen du vill hämta, till exempel en html-sida, en jpeg-bild, och headern används för att skapa vissa konventioner. Till exempel kommer klienten och servern överens om vissa överföringsformat, och klienten får först headern, känner till viss formatinformation och börjar sedan läsa brödtexten.

Klient: Accept-Encoding:gzip (komprimera den åt mig, jag använder trafik, ladda ner den först och packa sedan långsamt upp)

Server 1: Innehållskodning: null (Ingen innehållskodningsheader.) Jag ger ingen kompression, CPU:n är inte gratis, vill du ha den)

Server 2: Innehållskodning:gzip (spara trafik åt dig, komprimera den)
Klient: Anslutning: keep-alive (Storebror, vi har äntligen byggt en TCP-anslutning, vi kommer använda den nästa gång)

Server 1: Anslutning: keep-alive (inte lätt, fortsätt använda)

Server 2: Anslutning: stäng (Den som fortsätter använda den med dig, vår TCP är engångs, och vi måste återansluta nästa gång vi hittar den)
HTTP-protokollet har inte tre handskakningar, och när en klient begär resurser från servern ska serversidan ha företräde. Det finns också vissa headers som inte har någon förhandlingsprocess, men servern säger direkt åt klienten vad den ska göra. Till exempel är Content-Length ovan vad servern berättar för klienten hur stor kroppen är. Men! Servitören kanske inte kan säga exakt hur stor kroppen är i förväg. Servern måste skriva headern först och sedan brödtexten, om du vill skriva body-fallet i headern måste du veta kroppsstorleken i förväg. Om kroppen genereras dynamiskt kommer servern att avsluta och sedan börja skriva headern, vilket kräver mycket extra overhead, så det kanske inte finns någon innehållslängd i headern.

Så hur vet klienten kroppens storlek? Servern berättar det på tre sätt.


1. Servern känner redan till resursstorleken och berättar det via innehållslängdsheadern.

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

Transfer-Encoding: null


2. Servern kan inte veta resursens storlek i förväg, eller är ovillig att lägga resurser på att beräkna resursens storlek i förväg, så den lägger till en header till http-svarsmeddelandet kallad Transfer-Encoding:chunked, vilket betyder block transfer. Varje block använder ett fast format, med blockets storlek framför, datan bakom och sedan det sista blocket med storleken 0. På så sätt måste klienten när den parsar vara uppmärksam på att ta bort några värdelösa fält.

Content-Length:null

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


3. Servern känner inte till resursens storlek och stöder inte chunked transmission-läget, så det finns varken innehållslängdsheader eller transfer-encoding-header. Vid denna tidpunkt måste headern som servern returnerar vara nära.

Content-Length:null

Transfer-Encoding:null

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





Föregående:Detaljerad tolkning av innehållslängd i HTTP-protokollet
Nästa:HTTP-protokoll Transfer-Encoding (chunked)
Publicerad den 2019-9-24 17:16:57 |
Tack, hyresvärd
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com