HTTP pipelining

Da Wikipedia, l'enciclopedia libera.
Confronto di collegamento fra una pipelining e una connessione non-pipelining

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

L'adozione del pipelining delle richieste HTTP comporta un significativo miglioramento[2] 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.[3]

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[modifica | modifica wikitesto]

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

Implementazione nei server web[modifica | modifica wikitesto]

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[modifica | modifica wikitesto]

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.[4]

  • Internet Explorer 8 non effettua il pipeline delle richieste a causa di timori riguardanti proxy malfunzionanti e blocchi head of line (HOL).[5]
  • I browser Mozilla (come Mozilla Firefox, SeaMonkey and Camino (browser)) supportano il pipelining, che è però disabilitato come impostazione predefinita.[6][7] Il pipelining è disabilitato per evitare eventuali problemi con server malconfigurati.[8] Quando il pipelining è abilitato i browser Mozilla sfruttano analisi euristiche per disattivarlo qualora si visitino vecchi server IIS.[9]
  • Konqueror 2.0 supporta il pipelining, ma è disabilitato di default.[senza fonte]
  • 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[10], mentre in Chromium è abilitato come impostazione preimpostata[11])

Implementazione nei proxy web[modifica | modifica wikitesto]

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

Note[modifica | modifica wikitesto]

  1. ^ (EN) Definizione del protocollo HTTP/1.1 -- Section 8.1.2.2 Pipelining, W3C, giugno 1999. URL consultato il 16 settembre 2011.
  2. ^ (EN) Henrik Frystyk Nielsen, Jim Gettys; Anselm Baird-Smith et al., Network Performance Effects of HTTP/1.1, CSS1, and PNG, World Wide Web Consortium, 24 giugno 1997. URL consultato il 14 gennaio 2010.
  3. ^ (EN) Definizione del protocollo HTTP/1.1 -- Section 9.1.2 Idempotent Methods, W3C, giugno 1999. URL consultato il 16 maggio 2009.
  4. ^ (EN) Nathan Willis, Reducing HTTP latency with SPDY, LWN.net, 18 novembre 2009.
  5. ^ (EN) Windows Internet Explorer 8 Expert Zone Chat (August 14, 2008), Microsoft, 14 agosto 2008. URL consultato il 2009-03-27.
  6. ^ Network.http.pipelining - MozillaZine Knowledge Base
  7. ^ (EN) Cheah Chu Yeow, Firefox secrets, SitePoint, 2005, p. 292, ISBN 978-0975240243.
  8. ^ (EN) Bug 264354 - Enable HTTP pipelining by default, Mozilla. URL consultato il 16 settembre 2011.
  9. ^ (EN) Source code – nsHttpConnection.cpp, Mozilla, 7 maggio 2010. URL consultato il 5 dicembre 2010.
  10. ^ (EN) Issue 8991: Optional HTTP pipelining mode, Google, 19 marzo 2009. URL consultato il 16 maggio 2009.
  11. ^ (EN) Gary Mark, HTTP Pipelining In Google Chrome, BrowserFame.com, 20 ottobre 2011. URL consultato il 20 ottobre 2011.
  12. ^ (EN) Mark Nottingham, The State of Proxy Caching, 20 giugno 2007. URL consultato il 16 maggio 2009.