Il Multiplexing è un metodo in HTTP/2 in cui è possibile inviare più richieste HTTP mentre le risposte possono essere ricevute in modo asincrono tramite una singola connessione TCP. Multiplexing è il cuore del protocollo HTTP/2.
Frame and Stream
HTTP/2 è un protocollo binario. Ad ogni richiesta e risposta di HTTP/2 viene dato un ID unico chiamato ID Stream e la richiesta e la risposta HTTP è suddivisa in fotogrammi. I frame sono dati binari. L’ID Stream è utilizzato per identificare a quale richiesta o risposta appartiene un fotogramma. Uno stream è una raccolta di fotogrammi con lo stesso ID stream.
Per fare una richiesta HTTP, innanzitutto il client divide la richiesta in frame binari e assegna un ID stream identico per tutti i frame. Quindi inizia una connessione TCP con il server. Quindi il client inizia a inviare i frame al server. Una volta che il server elabora le informazioni e ha la risposta pronta divide la risposta in frame e fornisce a questi ultimi un ID stream di risposta (identico per tutti i frame). Poi il server invia la risposta in frame.
L’ID Stream è necessario perché vengono create molteplici richieste per un’unica origine usando una singola connessione TCP. In questo modo attraverso l’ID stream si riesce ad identificare a quale richiesta o risposta appartiene un frame.
Richieste HTTP multiple
Una singola connessione TCP può essere utilizzata per fare richieste HTTP a un’unica origine. Per più origini sono necessarie più connessioni TCP.
Una volta stabilita una connessione TCP, tutte le richieste di tale origine vengono eseguite tramite tale connessione TCP. Più richieste HTTP/2 sono suddivise in fotogrammi e assegnati i rispettivi ID stream. Tutti i frame proveniente da più stream vengono inviati in modo asincrono. Il server invia anche le risposte in modo asincrono. Quindi, se una risposta sta prendendo troppo tempo, gli altri non devono aspettare che finisca. Il client riceve i frame e li organizza secondo il loro ID stream.
La richiesta e la risposta si verificano entrambi parallelamente, mentre il client sta inviando frame, il server invia i frame al client.
La figura di cui sopra mostra come le richieste e le risposte avvengono in modo parallelo. Mostra anche come molteplici richieste / risposte vengono suddivise in fotogrammi individuali e vengono inviati uno per uno in modo asincrono.
Quando le richieste di una determinata origine vengono eseguite, la connessione TCP viene mantenuta aperta per qualche tempo prima della chiusura.
Definizione delle priorità
Un flusso (o richiesta) può avere un valore di priorità. La priorità determina la quantità di memoria, tempo di CPU e larghezza di banda necessaria da allocare sul server per una richiesta. Per impostazione predefinita, il server invia i frame di più richieste in modo asincrono senza alcun ordine e li procede in modo parallelo. Ma la priorità può obbligare il server a inviare frame di una risposta prima di altre risposte.
Frame di tipo Settings
Il controllo del flusso è un metodo per controllare il tasso di trasmissione di dati tra client e server. Il client e il server decidono le impostazioni del tasso di trasmissione una volta stabilita la connessione e prima che inizia il trasferimento effettivo dei dati.
Il controllo del flusso TCP e i controlli di flusso HTTP/2 sono due cose diverse. Il controllo del flusso TCP decide le impostazioni per l’intera connessione mentre il controllo di flusso HTTP/2 decide le impostazioni per i flussi individuali e anche per l’intero collegamento.
Quando viene stabilita la connessione TCP / HTTP/2, il client e il server si scambiano in primo luogo un frame Settings, che indica quanti flussi possono essere aperti alla volta (o quante richieste parallele), quanti byte il server è pronto a ricevere per un flusso e per l’intero collegamento e la velocità a cui i dati possono essere consegnati o ricevuti cioè la dimensione della finestra.