Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 11671|Risposta: 1

Contenuto di lunghezza del protocollo Http

[Copiato link]
Pubblicato il 24-09-2019 16:43:20 | | | |
prefazione

Il protocollo HTTP è uno dei protocolli più importanti su Internet, anche se sembra semplice, ma in pratica spesso incontra problemi, e lo abbiamo incontrato diverse volte. Ci sono connessioni lunghe e parsing di pacchetti. Non puoi sapere nulla del protocollo HTTP, devi capirlo a fondo. Quindi ho scritto questa serie per condividere i problemi e le esperienze del protocollo HTTP.



Il protocollo HTTP ha un'intestazione e un corpo sia per i pacchetti di richiesta che per quelli di risposta, e il corpo è la risorsa che si desidera ottenere, come una pagina html, un'immagine jpeg, e l'intestazione viene usata per stabilire certe convenzioni. Ad esempio, client e server concordano alcuni formati di trasmissione, e il client prima riceve l'intestare, conosce alcune informazioni sul formato e poi inizia a leggere il corpo.

Client: Accept-Encoding:gzip (comprimilo per me, sto usando il traffico, scaricalo prima e poi scomprimilo lentamente)

Server 1: Content-Encoding: null (Nessun header Content-Encoding.) Non do compressione, la CPU non è gratuita, la vuoi?)

Server 2: Content-Encoding:gzip (salva il traffico per te, comprimilo)
Cliente: Connessione: keep-alive (Fratello maggiore, finalmente abbiamo costruito una connessione TCP, la useremo la prossima volta)

Server 1: Connessione: keep-alive (non facile, continua a usare)

Server 2: Connessione: chiusa (Chiunque continui a usarlo con te, il nostro TCP è una tantum, e dovremo riconnetterci la prossima volta che lo troveremo)
Il protocollo HTTP non prevede tre handshake e, quando un client richiede risorse al server, prevale il lato server. Ci sono anche alcune header che non hanno un processo di negoziazione, ma il server dice direttamente al client cosa fare. Ad esempio, la Longitudine del Contenuto sopra è ciò che il server indica al client quanto è grande il corpo. Ma! Il cameriere potrebbe non essere in grado di dirti esattamente quanto sia grande il corpo in anticipo. Il server deve prima scrivere l'header, poi il corpo; se vuoi scrivere il body case nell'header, devi conoscere la dimensione del corpo in anticipo. Se il corpo è generato dinamicamente, il server finirà e inizierà a scrivere l'intestazione (header), il che richiede molto overhead aggiuntivo, quindi potrebbe non esserci una lunghezza di contenuto nell'header.

Quindi, come fa il cliente a sapere la dimensione del corpo? Il server te lo dice in tre modi.


1. Il server conosce già la dimensione della risorsa e ti informa tramite l'intestazione di contenuto lungo.

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

Transfer-Encoding: null


2. Il server non può conoscere in anticipo la dimensione della risorsa, o non è disposto a spendere risorse per calcolarne la dimensione in anticipo, quindi aggiungerà un'intestazione al messaggio di risposta http chiamata Transfer-Encoding:chunked, che significa trasferimento a blocchi. Ogni blocco utilizza un formato fisso, con la dimensione del blocco davanti, i dati dietro di esso e poi l'ultimo blocco con una dimensione 0. In questo modo, quando il client analizza le analisi, deve prestare attenzione alla rimozione di alcuni campi inutili.

Content-Length:null

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


3. Il server non conosce la dimensione della risorsa e non supporta la modalità di trasmissione a blocchi, quindi non esiste né l'intestazione content-length né l'intestazione di transfer-encoding. In questo momento, l'intestazione restituita dal server deve essere vicina.

Content-Length:null

Transfer-Encoding:null

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





Precedente:Interpretazione dettagliata della lunghezza del contenuto nel protocollo HTTP
Prossimo:Protocollo HTTP Transfer-Encoding (a squam)
Pubblicato il 24-9-2019 17:16:57 |
Grazie, padrone di casa
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com