Cloudflare a pregătit un modul pentru a oferi suport pentru protocolul HTTP / 3 din NGINX. Modulul este gata sub forma unui snap pe biblioteca quiche dezvoltat la Cloudflare cu implementarea protocolului de transport QUIC și HTTP / 3. Codul quiche este scris în Rust, dar modulul pentru NGINX este scris în C și accesează biblioteca prin legături dinamice. Orele de funcționare sunt deschise sub licența BSD.
Din software-ul clientului, Suportul HTTP / 3 a fost deja adăugat la versiunile experimentale Chrome Canary și utilitatea curl. Pe partea de server, până acum a fost necesară utilizarea unor implementări de test izolate care au capacități limitate. Capacitatea de a gestiona HTTP / 3 în nginx va simplifica semnificativ implementarea serverelor cu suport HTTP / 3 și va face implementarea testului noului protocol mai accesibilă.
HTTP / 3 standardizează utilizarea protocolului QUIC ca transport pentru HTTP / 2. Protocolul QUIC a fost dezvoltat de Google ca o alternativă la TCP + TLS pentru web, prin urmare intenționează să rezolve problemele cu o lungă perioadă de instalare și coordonare a compușilor în TCP și întârzie eliminarea pierderii de pachete în timpul transmiterii datelor. QUIC este un plug-in la protocolul UDP care acceptă multiplexarea mai multor conexiuni și oferă metode de criptare echivalente cu TLS / SSL.
Printre caracteristicile cheie ale QUIC care se remarcă:
- Securitate ridicată, similară cu TLS (de fapt, QUIC oferă posibilitatea de a utiliza TLS peste UDP).
- Controlul integrității fluxului care previne pierderea pachetelor.
- Capacitatea de a stabili o conexiune instantaneu (0-RTT, în aproximativ 75% din cazuri, datele pot fi transferate imediat după trimiterea pachetului de configurare a conexiunii) și asigură întârzieri minime între trimiterea unei cereri și primirea unui răspuns (RTT, Round Trip Time) .
- Nu utilizați același număr de ordine atunci când retransmiteți un pachet, ceea ce evită ambiguitatea în determinarea pachetelor primite și elimină expirările.
- Pierderea unui pachet afectează livrarea numai a fluxului asociat acestuia și nu oprește livrarea de date în fluxuri transmise în paralel prin conexiunea curentă.
- Instrumente de corectare a erorilor care minimizează întârzierile datorate retransmiterii pachetelor pierdute. Utilizarea codurilor speciale de corectare a erorilor la nivel de pachet pentru a reduce situațiile care necesită retransmiterea datelor de pachete pierdute.
- Limitele blocurilor criptografice sunt aliniate cu limitele pachetelor QUIC, reducând efectul pierderii pachetelor asupra decodificării conținutului pachetelor ulterioare
- Nu există probleme cu blocarea cozii TCP
- Suport pentru identificatorul de conexiune, care reduce timpul pentru stabilirea unei reconectări pentru clienții mobili
- Abilitatea de a conecta mecanisme avansate pentru a controla supraîncărcarea conexiunii
- Utilizarea tehnicii de predicție a lățimii de bandă în fiecare direcție pentru a asigura intensitatea optimă a redirecționării pachetelor, împiedicându-l să ajungă la o stare de congestie în care se observă pierderea pachetelor
- Performanță remarcabilă și câștiguri de performanță față de TCP. Pentru serviciile video precum YouTube, QUIC a arătat o reducere de 30% a operațiunilor de re-tamponare la vizionarea videoclipurilor.
Cum se implementează modulul care acceptă HTTP / 3 în NGINX?
Pentru cei care sunt interesați să poată implementa acest modul pe serverul lor, O pot face urmând instrucțiunile pe care le împărtășim mai jos.
Pentru a o compila, trebuie doar să descarce patch-ul pentru nginx 1.16 și codul bibliotecii quiche.
curl -O https://nginx.org/download/nginx-1.16.1.tar.gz tar xzvf nginx-1.16.1.tar.gz git clone --recursive https://github.com/cloudflare/quiche cd nginx-1.16.1 patch -p01 < ../quiche/extras/nginx/nginx-1.16.patch
Și compilăm NGINX cu suport HTTP / 3 activat:
./configure \ --prefix=$PWD \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_v3_module \ --with-openssl=../quiche/deps/boringssl \ --with-quiche=../quiche make
În timpul compilării, suportul TLS trebuie să se bazeze pe biblioteca BoringSSL („–cu-openssl = .. / quiche / deps / boringssl”), utilizarea OpenSSL nu este încă acceptată.
Pentru a accepta conexiuni în configurație, vor trebui să adauge directiva ascultător cu semnalizatorul „quic”.