Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 11671|Antwoord: 1

Inhoudslengte van het Http-protocol

[Link kopiëren]
Geplaatst op 24-9-2019 16:43:20 | | | |
inleiding

Het HTTP-protocol is een van de belangrijkste protocollen op het internet, hoewel het eenvoudig lijkt, ondervindt het in de praktijk vaak problemen, en we zijn het meerdere keren tegengekomen. Er zijn lange verbindingen en pakketparsing. Je kunt niets weten over het HTTP-protocol, je moet het grondig begrijpen. Dus heb ik deze serie geschreven om de problemen en ervaringen van het HTTP-protocol te delen.



Het HTTP-protocol heeft een header en een body voor zowel de request- als reply-pakketten, en de body is de resource die je wilt ophalen, zoals een html-pagina, een jpeg-image, en de header wordt gebruikt om bepaalde conventies te maken. Bijvoorbeeld, de client en de server komen overeen over enkele transmissieformaten, en de client krijgt eerst de header, kent wat formaatinformatie en begint dan de body te lezen.

Client: Accept-Encoding:gzip (comprimer het voor mij, ik gebruik verkeer, download het eerst en pak het dan langzaam uit)

Server 1: Content-encoding: null (Geen Content-Encoding header.) Ik geef geen compressie, de CPU is niet gratis, wil je het wel)

Server 2: Content-Encoding:gzip (sla verkeer voor je op, comprimeer het)
Client: Verbinding: keep-alive (Grote broer, we hebben eindelijk een TCP-verbinding gebouwd, we zullen die de volgende keer gebruiken)

Server 1: Verbinding: keep-alive (niet makkelijk, blijf gebruiken)

Server 2: Verbinding: sluiten (Wie het ook blijft gebruiken met jou, onze TCP is eenmalig, en we zullen de volgende keer opnieuw moeten verbinden als we het vinden)
Het HTTP-protocol heeft geen drie handshakes, en wanneer een client resources van de server opvraagt, wint de serverzijde. Er zijn ook enkele headers zonder onderhandelingsproces, maar de server vertelt de client direct wat hij moet doen. Bijvoorbeeld, de bovenstaande Content-Length is wat de server aan de client vertelt hoe groot het lichaam is. Maar! De serveerster kan je misschien niet van tevoren precies vertellen hoe groot het lichaam is. De server moet eerst de header schrijven, en daarna de body; als je de body case in de header wilt schrijven, moet je de body-grootte van tevoren weten. Als de body dynamisch wordt gegenereerd, maakt de server de header af en begint hij met het schrijven van de header, wat veel extra overhead vereist, dus er zit mogelijk geen inhoudslengte in de header.

Hoe weet de cliënt dan hoe groot het lichaam is? De server vertelt het je op drie manieren.


1. De server kent de resourcegrootte al en vertelt het via de content-length header.

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

Transfer-Encoding: null


2. De server kan de grootte van de resource niet van tevoren weten, of is niet bereid resources te besteden aan het berekenen van de grootte van de resource, dus voegt hij een header toe aan het http-antwoordbericht genaamd Transfer-Encoding:chunked, wat block transfer betekent. Elk blok gebruikt een vast formaat, met de grootte van het blok ervoor, de data erachter, en dan het laatste blok met een grootte van 0. Op deze manier moet de client bij het parsen letten op het verwijderen van enkele nutteloze velden.

Content-Length:null

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


3. De server kent de grootte van de resource niet en ondersteunt de chunked transmission mode niet, dus er is noch de content-length header noch de transfer-encoding header. Op dat moment moet de header die door de server wordt teruggegeven dichtbij zijn.

Content-Length:null

Transfer-Encoding:null

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





Vorig:Gedetailleerde interpretatie van Content-Length in het HTTP-protocol
Volgend:HTTP-protocol Transfer-Encoding (gehuld)
Geplaatst op 24-9-2019 17:16:57 |
Dank u, huisbaas
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com