Compania Cloudflare pentru a asigura suportul pentru protocolul HTTP/3 în NGINX. Modulul este realizat sub forma unei extensii asupra bibliotecii dezvoltate de Cloudflare cu implementarea protocolului de transport QUIC și HTTP/3. Codul quiche este scris în limbajul Rust, dar modulul pentru NGINX este scris în limbajul C și accesează biblioteca prin legare dinamică. Lucrările sub licența BSD.
Pentru a compila, este suficient să descărcați la nginx 1.16 și biblioteca quiche, după care trebuie recompilat nginx cu opțiunile „—with-http_v3_module —with-quiche=..\/quiche”. La compilare, suportul TLS trebuie să se bazeze pe biblioteca BoringSSL („—with-openssl=..\/quiche\/deps\/boringssl”), utilizarea OpenSSL nu este încă suportată. Pentru a accepta conexiuni, trebuie adăugată în configurație directiva listen cu flag-ul „quic” (de exemplu, „listen 443 quic reuseport”).
În software-ul client, suportul pentru HTTP/3 a fost deja adăugat în versiunile experimentale Chrome Canary și în utilitarul curl. Pe partea serverului, încă era necesar să se utilizeze implementări de testare separate, limitate în capacitățile lor Posibilitatea de a procesa HTTP/3 în nginx va simplifica semnificativ desfășurarea serverelor cu suport pentru HTTP/3 și va face mai accesibilă implementarea experimentală a noului protocol. Apariția suportului nativ pentru HTTP/3 în nginx în ramura 1.17.x în termen de 6-12 luni.
Reamintim că HTTP/3 standardizează utilizarea protocolului QUIC ca transport pentru HTTP/2. Protocolul (Quick UDP Internet Connections) evoluează din 2013 de către compania Google ca o alternativă la combinația TCP+TLS pentru Web, rezolvând problemele cu timpi mari de stabilire și negociere a conexiunilor în TCP și eliminând întârzierile cauzate de pierderea pachetelor în timpul transferului de date. QUIC este o suprastructură peste protocolul UDP, care suportă multiplexarea mai multor conexiuni și oferă metode de criptare echivalente cu TLS/SSL.
Principalele QUIC:
- Securitate înaltă, similară cu TLS (în esență, QUIC oferă posibilitatea utilizării TLS peste UDP);
- Controlul integrității fluxului, prevenind pierderea pachetelor;
- Posibilitatea de a stabili instantaneu o conexiune (0-RTT, în aproximativ 75% din cazuri, datele pot fi transmise imediat după trimiterea pachetului de stabilire a conexiunii) și de a asigura întârzieri minime între trimiterea cererii și primirea răspunsului (RTT, Round Trip Time);
- Neutilizarea la retransmiterea pachetului cu același număr de secvență, ceea ce permite evitarea ambiguităților în determinarea pachetelor primite și eliminarea timeout-urilor;
- Pierderea unui pachet afectează livrarea doar a fluxului asociat și nu oprește livrarea datelor în fluxurile transmise în paralel prin conexiunea curentă;
- Mijloace de corectare a erorilor, care minimizează întârzierile cauzate de retransmisia pachetelor pierdute. Utilizarea unor coduri speciale de corectare a erorilor la nivel de pachet pentru a reduce situațiile care necesită retransmiterea datelor din pachetul pierdut.
- Limitele blocurilor criptografice sunt aliniate cu limitele pachetelor QUIC, ceea ce reduce impactul pierderilor de pachete asupra decodificării conținutului pachetelor următoare;
- Lipsa problemelor cu blocarea cozii TCP;
- Suport pentru identificatorul de conexiune, care permite reducerea timpului de reinstaurare a conexiunii pentru clienți mobile;
- Posibilitatea de a activa mecanisme extinse de control al supraîncărcării conexiunii;
- Utilizarea tehnicii de previzionare a capacității de transmisie în fiecare direcție pentru a asigura o intensitate optimă a trimiterii pachetelor, prevenind astfel ajungerea într-o stare de supraîncărcare, în care se observă pierderi de pachete;
- Un salt semnificativ și lățime de bandă, comparativ cu TCP. Pentru serviciile video, cum ar fi YouTube, utilizarea QUIC a arătat o reducere a operațiunilor de rebuffering în timpul vizionării video cu 30%.
Sursa: opennet.ro
