HTTP/2

Da Wikipedia, l'enciclopedia libera.
Jump to navigation Jump to search

HTTP/2 (originariamente chiamato HTTP/2.0) è la nuova versione del protocollo di rete HTTP usato dal World Wide Web. È basato su SPDY. HTTP/2[1] è stato sviluppato dal Working Group Hypertext Transfer Protocol (httpbis) dell'Internet Engineering Task Force[2]. HTTP/2 sarebbe la prima nuova versione del protocollo HTTP dalla nascita di HTTP 1.1, il quale è diventato standard RFC 2616 nel 1999. Il Working Group ha presentato HTTP/2 allo IESG proponendolo come standard nel dicembre 2014.[3]

Gli sforzi effettuati per la standardizzazione sono una risposta allo SPDY, un protocollo HTTP-compatibile sviluppato da Google[4] e supportato in Chrome, Opera, Firefox, Internet Explorer 11, Safari, e Amazon Silk.[5]

Obiettivi[modifica | modifica wikitesto]

L'atto costitutivo del gruppo di lavoro[6] cita diversi obiettivi e temi di interesse:

  • Un meccanismo di negoziazione che consente ai client e server di utilizzare HTTP 1.1, 2.0, o potenzialmente altri protocolli non HTTP.
  • Mantenere la compatibilità di alto livello con HTTP 1.1 (per esempio con i metodi, codici di stato, e URI, e la maggior parte campi di intestazione).
  • Ridurre la latenza per migliorare la velocità di caricamento delle pagine nei browser web considerando:
    • La compressione dei dati degli header HTTP
    • Le tecnologie push lato server
    • La pipeline delle richieste
    • Soluzioni al problema del blocco head-of-line in HTTP 1
    • il caricamento in parallelo degli elementi di una pagina su una singola connessione TCP
  • Sostenere casi d'uso comuni di HTTP, come browser desktop, browser per cellulari, API web, server web a varie scale, server proxy, reverse server proxy, firewall e content delivery networks

Differenze con HTTP 1.1[modifica | modifica wikitesto]

I cambiamenti proposti non richiedono nessuna modifica al modo di lavorare delle applicazioni web esistenti, ma le nuove applicazioni possono avvantaggiarsi delle novità introdotte per incrementare la velocità.[7]

HTTP/2 mantiene ad alto livello la maggior parte della sintassi di HTTP 1.1 come metodi, codici di stato, campi degli header, URI. La differenza sta nel modo in cui è strutturato e trasportato il flusso dei dati tra il client e il server.[7] I siti web efficienti minimizzano il numero di richieste necessarie per restituire una pagina con la tecnica del "minifying" o minimizzazione (riducendo le dimensioni del codice e impacchettando piccoli pezzi di codice in unità più grandi, senza intaccarne la funzionalità) applicata su risorse come immagini e script. Ad ogni modo la minimizzazione non è necessariamente conveniente né efficiente e può ancora richiedere connessioni HTTP distinte per ottenere la pagina e le risorse minimizzate.

HTTP/2 permette al server di inviare ("push") più dati di quelli richiesti dal client. Questo consente al server di fornire dati che sa essere necessari ad un web browser per completare la pagina, senza attendere che il browser esamini la prima risposta e senza l'overhead di un ciclo di richiesta addizionale.[8]

Altri miglioramenti prestazionali nella prima stesura di HTTP/2 (che era una copia di SPDY) vengono dal multiplexing di richieste e risposte, allo scopo di evitare le problematiche di tipo HOLB (head-of-line blocking) note in HTTP/1.1 (anche quando viene utilizzata la tecnica dell'HTTP pipelining), compressione degli header, gestione delle richieste in base alla priorità delle stesse (prioritization).[9]

Genesi e successive differenze con SPDY[modifica | modifica wikitesto]

SPDY (si pronuncia "spidi") è un progetto di ricerca portato avanti da Google. Il protocollo derivato dal progetto SPDY, che porta lo stesso nome, è inteso per il trasporto di informazioni e altro contenuto sul web, con obiettivo principale la riduzione della latenza. SPDY si appoggia sempre sulla stessa pipe TCP, ma utilizza differenti protocolli per ottenere questa riduzione. Le modifiche di base apportate a HTTP/1.1 per creare SPDY includono: "vero pipelining delle richieste senza restrizioni FIFO, un meccanismo di framing dei messaggi per semplificare lo sviluppo di client e server, compressione obbligatoria (compresi gli header), gestione delle priorità e anche comunicazioni bi-direzionali."[10] Il gruppo di lavoro httpbis prese in considerazione il protocollo SPDY di Google, l'HTTP Speed+Mobility proposal (basato su SPDY) di Microsoft[4] e il Network-Friendly HTTP Upgrade.[11] Nel luglio 2012 Facebook fornì un feedback su ciascuna delle proposte e raccomandò che HTTP/2 fosse basato su SPDY.[12]

La bozza iniziale di HTTP/2 fu pubblicata a novembre 2012 ed era basata direttamente su una copia di SPDY.[9]

La maggior differenza tra HTTP/1.1 e SPDY è che ad ogni azione di un utente in SPDY viene assegnato uno "stream ID", il che significa che un singolo canale TCP connette l'utente al server. SPDY suddivide le richieste in controllo o dati, che è un "semplice eseguire il parsing del protocollo binario con due tipi di frame".[10]

SPDY ha mostrato un evidente miglioramento rispetto HTTP, con incrementi della velocità di caricamento di una pagina dall'11.81% fino al 47.7%.[13] HTTP/2 usa SPDY come punto di partenza. In HTTP/2, comunque, viene utilizzato un algoritmo di compressione Huffman, di tipo code-based, anziché la compressione dinamica stream-based usata in SPDY. Questo aiuta a ridurre potenziali rischi di attacchi sul protocollo.

Il 9 febbraio 2015 Google ha annunciato di prevedere la rimozione del supporto per SPDY in Chrome entro i primi mesi del 2016, in favore del supporto a HTTP/2, iniziando da Chrome 40.[14]

Cifratura[modifica | modifica wikitesto]

Nonostante HTTP/2 sia stato progettato per supportare sia HTTP che HTTPS[15], di fatto tutte le implementazioni all'interno dei principali browser (Firefox, Chrome, Safari, Opera, IE, Edge) hanno deciso di supportare esclusivamente HTTP/2 attraverso TLS, rendendolo di fatto un requisito.

Critiche[modifica | modifica wikitesto]

Tappe fondamentali dello sviluppo[modifica | modifica wikitesto]

Data Tappa
20 dicembre 2007 Prima Internet Draft di revisione per HTTP1.1[16]
23 gennaio 2008 Prima Internet Draft sui requisiti di sicurezza per HTTP[17]
inizio 2012 Richiesta di proposte per HTTP 2.0[18]

Supporto Browser[modifica | modifica wikitesto]

I server HTTP/HTTPS[modifica | modifica wikitesto]

Note[modifica | modifica wikitesto]

  1. ^ (EN) M. Thomson (ed.), M. Belshe e R. Peon, Hypertext Transfer Protocol version 2 - draft-ietf-httpbis-http2-16, su ietf.org, HTTPbis Working Group. URL consultato l'11 febbraio 2015.
  2. ^ (EN) Hypertext Transfer Protocol Bis (httpbis) - Charter, IETF, 2012.
  3. ^ (EN) Raymor, Brian, Wait for it – HTTP/2 begins Working Group Last Call!, Microsoft Open Technologies, 7 agosto 2014. URL consultato il 7 settembre 2014 (archiviato dall'url originale il 6 ottobre 2014).
  4. ^ a b (EN) Sebastian Anthony, S&M vs. SPDY: Microsoft and Google battle over the future of HTTP 2.0, ExtremeTech, 28 marzo 2012.
  5. ^ (EN) Can the rise of SPDY threaten HTTP?, Restlet, 2011.
  6. ^ (EN) Hypertext Transfer Protocol (httpbis) -, su datatracker.ietf.org. URL consultato il 25 gennaio 2016.
  7. ^ a b (EN) Ilya Grigorik, Chapter 12, in HTTP 2.0. High Performance Browser Networking., O'Reilly Media, Inc., 2014.
  8. ^ (EN) Pratt, Michael, Apiux, in apiux.com.
  9. ^ a b (EN) Dio Synodinos, HTTP 2.0 First Draft Published, InfoQ.com (C4Media Inc.), Novembre 2012.
  10. ^ a b (EN) Grigorik, Ilya, Life beyond HTTP 1.1: Google's SPDY.
  11. ^ (EN) Willy Tarreau, Amos Jeffries, Adrien de Croy e Poul-Henning Kamp, Proposal for a Network-Friendly HTTP Upgrade, Network Working Group. Internet Engineering Task Force., 2012.
  12. ^ (EN) Doug Beaver, HTTP2 Expression of Interest, in (mailing list). W3C., July 15, 2012.
  13. ^ (EN) The Chromium Projects., SPDY: An experimental protocol for a faster web, su chromium.org.
  14. ^ (EN) Chris Bentzel, Hello HTTP/2, Goodbye SPDY, su blog.chromium.org.
  15. ^ HTTP/2 Frequently Asked Questions, su http2.github.io. URL consultato il 29 agosto 2019.
  16. ^ HTTP/1.1, part 1: URIs, Connections, and Message Parsing, su tools.ietf.org. URL consultato il 29 agosto 2019.
  17. ^ Security Requirements for HTTP, su tools.ietf.org. URL consultato il 29 agosto 2019.
  18. ^ Rechartering HTTPbis, su lists.w3.org. URL consultato il 29 agosto 2019.

Voci correlate[modifica | modifica wikitesto]

Altri progetti[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]