HTTP pipelining
# HTTP pipelining

L'HTTP pipelining è una tecnica in cui vengono inviate più richieste HTTP su una singola connessione TCP senza aspettare le risposte corrispondenti.

L'adozione del pipelining delle richieste HTTP comporta un significativo miglioramento nella velocità di caricamento delle pagine HTML, in particolare nel caso di connessioni ad alta latenza come nel caso delle connessioni satellitari.

Poiché è generalmente possibile inserire più richieste HTTP nello stesso segmento TCP, il pipelining HTTP consente di inviare e ricevere sulla rete meno pacchetti, riducendone quindi il carico.

Metodi non idempotenti come POST non dovrebbero subire pipelining, mentre sequenze di GET ed HEAD possono sempre avvantaggiarsi di questa tecnica. Una sequenza di altre richieste come GET, HEAD, PUT e DELETE possono o non possono sfruttare il pipelining a seconda del fatto che ogni richiesta dipenda o meno dall'effetto delle altre.

Per poter essere attuato il pipelining HTTP necessita il supporto sia lato client che lato server. I server che implementano il protocollo HTTP/1.1 devono supportare il pipelining, il che non significa che debbano rispondere alle richieste in pipelining, ma quantomeno non devono dare errori qualora in client invii richieste di questo tipo.

## Status di Implementazione

Il pipelining è supportato solo dal protocollo HTTP/1.1, non è presente nelle specifiche della versione 1.0.

### Implementazione nei server web

Implementare il pipelining in un server web è relativamente semplice, basta assicurarsi che non ci siano flussi di rete scartati tra richieste successive. Per questa ragione gran parte dei server web attualmente supporta il pipelining senza alcun problema.

### Implementazione nei browser web

Tra tutti i principali browser web, solo Opera presenta un'implementazione pienamente funzionale ed abilitata di default del pipelining. In tutti gli altri browser il pipelining è disabilitato o non implementato.

* Internet Explorer 8 non effettua il pipeline delle richieste a causa di timori riguardanti proxy malfunzionanti e blocchi head of line (HOL).
* I browser Mozilla (come Mozilla Firefox, SeaMonkey and Camino (browser)) supportano il pipelining, che è però disabilitato come impostazione predefinita. Il pipelining è disabilitato per evitare eventuali problemi con server malconfigurati. Quando il pipelining è abilitato i browser Mozilla sfruttano analisi euristiche per disattivarlo qualora si visitino vecchi server IIS.
* Konqueror 2.0 supporta il pipelining, ma è disabilitato di default.
* Google Chrome non supporta il pipelining nelle sue versioni stabili (fino alla versione 17), ma la versione 18 beta introduce il pipelining per il protocollo http (non per l'https) come opzione, mentre in Chromium è abilitato come impostazione preimpostata)

### Implementazione nei proxy web

La gran parte dei proxy HTTP non effettua il pipelining delle richieste in uscita.

