Vai al contenuto

Go 1.27 evita di buttare una connessione HTTP per un a capo

net/http recupera i piccoli resti non letti nelle risposte HTTP/1, rendendo più facile riusare una connessione già aperta.

Che succede

Hai letto il JSON, chiuso il corpo della risposta e ottenuto i dati che servivano. Eppure la connessione potrebbe essere inutilizzabile per la richiesta successiva: basta che dopo il JSON sia rimasto un a capo non letto. In HTTP/1 le risposte viaggiano una dopo l’altra, e bisogna arrivare alla fine di una per riconoscere l’inizio della prossima.

Da Go 1.27, net/http prova a consumare in background il contenuto rimasto quando chiudi il corpo: al massimo 256 KB o 50 millisecondi. Se riesce, può rimettere la connessione a disposizione, evitando un nuovo collegamento TCP e TLS.

Il Go Blog mostra un esempio di 100 richieste che passa da circa 710 a 150 millisecondi sul computer degli autori. È il risultato di quel test, non un’accelerazione generale di Go. HTTP/2 gestisce flussi separati sulla stessa connessione e non ha questo specifico problema.

Perché conta

Il byte che non ti interessava poteva costare più della risposta: obbligava il client a rifare da capo il collegamento.

Leggi la fonte

go.dev

Vuoi sapere di più su pillole come questa?