Virksomheden NGINX om begyndelsen af testning af QUIC- og HTTP/3-protokollerne i HTTP-serveren og proxyen nginx. Implementeringen er baseret på IETF-QUIC-specifikationen og er tilgængelig via , afledt af udgivelsen 1.19.0. Koden er distribueret under BSD-licensen og overlapper ikke med implementering af HTTP/3 for nginx fra Cloudflare, som er et separat projekt.
Støtte til HTTP/3 i nginx er markeret som eksperimentel, da af protokollen er implementeret. Ikke desto mindre kan nginx allerede anvendes til at sende svar på enkle HTTP/3-anmodninger over QUIC og til at uploade/downloade store filer. Blandt de manglende funktioner i protokollen nævnes protokolversion forhandling, ECN og congestion control, strukturerede logs, recovery mode (QUIC recovery, flow control og congestion control), NAT Rebinding, mobile adresser, Server push, og data attachment (trailer). Der er også kun grundlæggende støtte til håndtering af ACK-pakker og flow control, hvilket kræver forbedringer. Ikke alle krav i standarden er opfyldt.
For at aktivere HTTP/3 kræves det at kompilere nginx med http_v3_module og tilføje en ekstra direktiv
"listen" med flaget "http3" for at oprette et lytende UDP-socket. For eksempel:
server {
listen 443 ssl; # TCP-socket til HTTP/1.1
listen 443 http3 reuseport; # UDP-socket til QUIC+HTTP/3
ssl_protocols TLSv1.3; # TLS 1.3 kræves i QUIC
ssl_certificate ssl/www.example.com.crt;
ssl_certificate_key ssl/www.example.com.key;
add_header Alt-Svc ‘quic=":443"‘; # markør for tilgængelighed af QUIC
add_header QUIC-Status $quic; # Header med status for brugen af QUIC
}
Det skal bemærkes, at HTTP/3 standardiserer brugen af PROTOKOLQUIC som transport for HTTP/2. Protokollen (Quick UDP Internet Connections) er siden 2013 blevet udviklet af Google som et alternativ til TCP+TLS-stakken til web, hvilket løser problemer med lang oprettelsestid og forbindelsesforhandling i TCP og eliminerer forsinkelser ved pakke tab under dataoverførsel. QUIC er et lag oven på UDP-protokollen, der understøtter multiplexing af flere forbindelser og tilbyder krypteringsmetoder, der svarer til TLS/SSL. På klientsiden er den eksperimentelle støtte til HTTP/3 allerede blevet tilføjet til , og .
Vigtige QUIC:
- Høj sikkerhed, svarende til TLS (QUIC muliggør faktisk brugen af TLS 1.3 over UDP);
- Overvågning af strømmens integritet, der forhindrer tab af pakker;
- Mulighed for straks at etablere forbindelse (0-RTT, i ca. 75% af tilfældene kan data overføres straks efter sending af forbindelsespakken) og sikre minimale forsinkelser mellem fremsendelse af anmodning og modtagelse af svar (RTT, Round Trip Time);
- Undgåelse af at bruge den samme sekvensnummer ved genoverførsel af pakken, hvilket forhindrer tvetydighed ved identifikation af modtagne pakker og eliminerer timeouts;
- Pakketab påvirker kun leveringen af den tilknyttede strøm og stopper ikke dataoverførslen i parallelt overførte strømme gennem den aktuelle forbindelse;
- Fejlkorrektionsmidler, der minimerer forsinkelser på grund af genoverførsel af tabte pakker. Brug af specialiserede fejlkorrektionskoder på pakkeniveau for at reducere situationer, der kræver genoverførsel af data fra en tabt pakke.
- Grænserne for kryptografiske blokke er justeret med grænserne for QUIC-pakker, hvilket reducerer tabspakkernes indvirkning på afkodningen af indholdet i efterfølgende pakker;
- Ingen problemer med TCP-køblokering;
- Understøttelse af forbindelsesidentifikatoren, der reducerer tiden til at etablere en genforbindelse for mobile klienter;
- Mulighed for at tilslutte udvidede mekanismer til overvågning af forbindelsesoverbelastning;
- Brug af kapacitetsprognoseteknikker i hver retning for at sikre optimal intensitet i pakkeafsendelsen, hvilket forhindrer at glide ind i en overbelastningssituation, hvor pakkemister forekommer;
- Bemærkbar i ydeevne og kapacitet sammenlignet med TCP. For videotjenester som YouTube har brugen af QUIC vist sig at reducere genbufferingsoperationer med 30% under videovisning.
Kilde: opennet.ru
