HTTP/3
# HTTP/3

HTTP/3 è la terza versione del protocollo Hypertext Transfer Protocol usato per il World Wide Web nonché il successore di HTTP/2. HTTP/3 è basato su una precedente bozza di RFC intitolata Hypertext Transfer Protocol (HTTP) over QUIC. QUIC è un protocollo di rete di livello di trasporto sviluppato originariamente da Google in cui il controllo della congestione nello spazio utente viene realizzato su protocollo User Datagram Protocol (UDP) e proprio l'appoggiarsi su QUIC/UDP invece che su TCP rappresenta la caratteristica distintiva di HTTP/3.

## Storia

Il 28 ottobre 2018 Mark Nottingham, responsabile dei gruppi di lavoro IETF HTTP e QUIC, nel contesto di una discussione in mailing list ha avanzato la richiesta ufficiale di rinominare HTTP-over-QUIC in HTTP/3, per "identificarlo chiaramente come un ulteriore legame tra la semantica dell'HTTP e il protocollo fisico... così che si capisca che è qualcosa di separato da QUIC" e di trasferire il suo sviluppo dal QUIC Working Group all'HTTP Working Group dopo il consolidamento e la pubblicazione della bozza. La sua proposta venne accettata dagli altri membri IETF dopo pochi giorni, a novembre 2018.

Il browser Chrome ha integrato il supporto di HTTP/3 nella "Canary build" di settembre 2019 e sebbene HTTP/3 non sia ancora usato di default in alcun browser, dal 2020 può essere abilitato nelle versioni stabili di Chrome e di Firefox. In via sperimentale, il supporto di HTTP/3 è stato reso disponibile anche su Safari Technology Preview l'8 aprile 2020.

Il 6 giugno 2022, IETF ha standardizzato HTTP/3 come RFC 9114.

## Implementazioni

### Browser

| Browser | Versione | Data |
| - | - | - |
| Chrome | 79 (stabile) | dicembre 2019 |
| Mozilla Firefox | 72.0.1 (stabile) | gennaio 2020 |
| Safari | Safari Technology Preview 104 | aprile 2020 |
| Edge | Edge (Canary build) | 2020 |

### Librerie

Sono disponibili le seguenti librerie open source che implementano le logiche di client o di server per QUIC e HTTP/3:

| Nome | Linguaggio di programmazione | Azienda | Repository |
| - | - | - | - |
| quiche | Rust | Cloudflare | https://github.com/cloudflare/quiche |
| neqo | Rust | Mozilla | https://github.com/mozilla/neqo |
| proxygen | C++ | Facebook | https://github.com/facebook/proxygen#quic-and-http3 |
| Cronet | C++ | Google | https://github.com/chromium/chromium/tree/master/net/quic |
| lsquic | C | LiteSpeed | https://github.com/litespeedtech/lsquic |
| nghttp3 | C | | https://github.com/ngtcp2/nghttp3 |
| h2o | C | | https://github.com/h2o/h2o |
| libcurl | C | | https://github.com/curl/curl |
| MsQuic | C | Microsoft | https://github.com/microsoft/msquic |
| Flupke | Java | | https://bitbucket.org/pjtr/flupke |
| aioquic | Python | | https://github.com/aiortc/aioquic |
| quic-go | Go | | https://github.com/lucas-clemente/quic-go |
| quic | Haskell | | https://github.com/kazu-yamamoto/quic |

La libreria quiche di Cloudflare può essere usata anche come patch di nginx, che prevede di supportare HTTP/3 nella versione 1.17.

Sono inoltre disponibili alcune librerie che implementano una versione precedente della bozza del protocollo o della versione Google di QUIC (Q046 usato in Chrome 76), come per esempio nghttp3.

