QUIC (Quick UDP Internet Connections) ืืื ืคืจืืืืงืื ืขื ืืื UDP ืืชืืื ืืื ืืชืืื ืืช ืฉื TCP, TLS ื-HTTP/2 ืืคืืชืจ ืืช ืจืื ืืืขืืืช ืฉืืื. ืื ื ืงืจื ืืขืชืื ืงืจืืืืช ืคืจืืืืงืื ืืืฉ ืื "ื ืืกืืื ื", ืืื ืืื ืืืจืื ืืืื ืืช ืฉืื ืื ืืกืื: ืืคืืชืื ื ืืฉื ืืืจ ืืืชืจ ื-7 ืฉื ืื. ืืชืงืืคื ืื ืืคืจืืืืงืื ืื ืืฆืืื ืืืคืื ืืกืื ืืจื, ืื ืขืืืื ืืคื ืื ืคืืฅ. ืืืืืื, QUIC ืืฉืืฉ ืขื ืงืืืช ืืื ืืืื ืืคืืืกืืืง ืืื ืืืืืฅ ืืช ืืชืขืืืจื ืืืฆืืฆื ืขืืืืืื ืืจืฉืชืืช ืกืืืืจืืืช, ืื-IETF ืืืจืื ืขื ืืืืื ืฉืื ืืคืจืืืืงืื ืืืกืืก ืืชืงื HTTP/3 (ืืืจืืช ืฉ-HTTP/2 ืืฉืชืืฉ
ืืืฉื
QUIC ืคืืชื ืืชืืืืฃ ื-TCP ืืืืจ ืงืืื, ืืฉืจ ืชืืื ื ืืืงืืจ ืขืืืจ ืจืฉืชืืช ืงืืืืืช ืืขืืืช ืืืืื ื ืืื. TCP ืืกืคืง ืื ืืช ืืคื ืืกืืจ, ืื ืฉืื ืืืืื ืืืช ืืืืืช, ืื ืืชืืจ ื ืขืฆืจ (
ืืืืืื ืฉ-QUIC ืืฉืื ืชืืืืฃ TCP ืืืืฉืื ืฉื TLS 1.3, ืื ืืืืืืจืื ืชืืื ืืืฆืคื ืื, ืืคืขื ืื ืชืขืืืจื ืืื ืืื ื ืงืื ืืืชืจ ืืืฉืจ ืื ืืื ืืืืชื ืขืืืจืช ื-HTTPS. ืื ืืกืฃ, QUIC ืืืืฉื ืืจืืช ืืืคืืืงืฆืื, ืืคื ืฉืชืืืจืฉ ืืืืคื ืืืื ืฉื ืืืกื ืืช ื-TCP ืื ืฆื.
ืืืจืืช ืืชืืืื ืืจืืืื ื-HTTP/2, ืืืขืื ืฉื ืืกืืืช ืจืืฉ-ืงื ื ืืชืจื ืฉื ืขืงื ืืฆืืจื ืืืขืืืจ ืื ืืช ืืคื ืืกืืจ. QUIC ืืืืฉื ืขื ืืื UDP, ืื ืฉืืื ืื ืืกืืื ืขืงืจืื ืืช, ืืืื ืืื ืืข ืืืืืืืช ืืืืืื ืื ืฆื, ืื ืืืืกืคืจืืช ืืืืืืืช ืืืืื ืืืงืื ืฉื "ืฉืื ืื", ืืืกืคืงืื ืืชืืจืืช. ืื ืืกืฃ, QUIC ืืคืฆื ืืช ืืชืืจ ืืืื ืืืืื ืืืกืคืจ ืฉืจืฉืืจืื ืขืืืจ ืกืืืื ืฉืื ืื ืฉื ืืงืฉืืช ืืชืื ืืืืืจ ืืืื. ืืคืืื, ืื ืืืืื ืืืืืช, ืขืืืืืช ืืืืืืฆืจ ืืขืืืช ืจืง ืขืืืจ ืชืืจ ืืื (ืืืืืื, ืขืืืจ ืืขืืจืช ืงืืืฅ ืกืคืฆืืคื):
ืืืฉืชืืฉ
ืืชืืืื, QUIC ืคืืชื ืืชืื ืืืื ืืืืชืื ืืืืื ืจืื ืืฉืืืืฉ ืืชืื ืืืืจื. ื-2013 ืืื ืืืขืืจ ื-IETF ืืฆืืจื ืชืงืื ื (ืฉืขืืืื ื ืืฉืืช), ืืืขืช ืื ืืื ืืืื ืืืฉืชืชืฃ ืืคืืชืื ืืคืจืืืืงืื ืขื ืืื ืืฆืขืช ืื ืฉืืกืจ ืื. ืงืืืฆืช ืืขืืืื ืฉื IETF ืืืจืื ืช ืคืืืฉืืช ืฉื ืชืืืช ืืืืืื ืืืืฉืจ ืชืงื ืืืฉ ืืื ืื ืืืืืืฉืื. ืืืฉืื ืื ืฉื QUIC ื ืืฉื ืืขืืงืจื ืืขื ืืกืืกื ืืืืฉืจ ืชืงื HTTP/3.
ืขื ืื, ืื ืืืืจ ืขื ืืืืืช HTTP/3 ืืคืจืืืืงืื ืืจืืฉื, ืื ืืื ืขืืืื ืื ืืกืชืืื ืืืืขื ืื ื ืชืื:
ืืื QUIC ืืืื ืืืืืช ืืืืฉื ืืชืืืืจื ืืื ืืืคืืืงืฆืื ืืฉืจืช, ืื ืฉื ืขืฉื ืืืฆืืื ื- Uber:
ืืขืจื ืฉื ืืืืจ ืขื ืืฆืืช QUIC
ืขื ืื ืช ืืืืืืข ืืืฆืืื QUIC ืืืฉืคืจ ืืช ืืืฆืืขื ืืืคืืืงืฆืื ืืงืืฉืืจืืืช ืืงืืื, ืืืืคื ื ืืช ืืืืกื ืืช ืืืฉื ื (HTTP/2 ืขื TLS/TCP) ืืคืจืืืืงืื QUIC. ืืฉืชืืฉื ื ืืกืคืจืืืช ืืจืฉืช
ืงืจืื ื ืฉืืคืจืืืงืืื ืฉื Chromium , ืืืืื ืืช ืืืจืกื ืืืงืืจืืช ืฉื ืืคืจืืืืงืื ืฉื Google - gQUIC. ืืืฉืื ืื ืื ื ืืฆื ืืฉืืคืืจ ืืชืืื ืืื ืืขืงืื ืืืจ ืืคืจื ื-IETF ืืขืืื ื ืืืืชืจ.ืชืืืื ืฉืืืื ื ืืช Cronet ืืืคืืืงืฆืืืช ืืื ืืจืืืื ืฉืื ื ืืื ืืืืกืืฃ ืชืืืืช QUIC. ืืืื ืืืจืฆืื ืืืฆืขื ืืฆืืจื ืืื ืฉืชืืืขืจ ืืช ืขืืืช ืืืืืจื. ืืืงืื ืืืืืืฃ ืืืืืืื ืืช ืขืจืืืช ืืจืฉืช ืืืฉื ื ืฉืืฉืชืืฉื ืืกืคืจืืื
OkHttp , ืฉืืืื ื ืืช Cronet ืชืืช ืืืกืืจืช ืฉื OkHttp API. ืขื ืืื ืฉืืืื ืืืจื ืื, ื ืื ืขื ื ืืฉืื ืืืื ืืฉืืืืช ืืจืฉืช ืฉืื ื (ืืฉืจ ืืฉืชืืฉืืชืืจืืืืื ืืืฉืื ) ืืจืืช ื-API.ืืืืื ืืืืฉืช ืื ืืจืืืื, ืืืืขื ื ืืช Cronet ืืืคืืืงืฆืืืช Uber iOS ืขื ืืื ืืืจืื ืชืขืืืจืช HTTP ืืืจืฉืช
API ืืืืฆืขืืชืคืจืืืืงืื NSURL . ืืคืฉืื ืื, ืืืกืืคืงืช ืขื ืืื ืงืจื iOS, ืืืคืืช ืื ืชืื ื ืืชืืืช URL ืกืคืฆืืคืืื ืืคืจืืืืงืื ืืืืืืื ืฉื ืืื ืืฉืื ืืช Cronet ืืืืฉืืื iOS ืฉืื ื ืืื ืขืืืืืช ืืืืจื ืืฉืืขืืชืืืช.
ื ืืงื ื
ืืงืฆื ืืืืืจื ืื ืชืคืกื ืืืืืจื QUIC ืืจื Google Cloud lb, ืืฉืจ
ืื ืื ืืคืชืืข ืฉ-Google Cloud ืขืืื ืืฆืืื ืขื ืืคืจืืืืงืื ืฉืคืืชื ืืืืื, ืืื ืืื ืืืืืจื ืืืืืช?
nginx
ืื ืืืื CloudFlare
curl -O https://nginx.org/download/nginx-1.16.1.tar.gz
tar xvzf 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
ืืื ืชืืื ืืืืจ ืืช ืืืืืืืื ืฉืื ืืืืืช ืืฆืืจื
./configure
--prefix=$PWD
--with-http_ssl_module
--with-http_v2_module
--with-http_v3_module
--with-openssl=../quiche/deps/boringssl
--with-quiche=../quiche
make
ืื ืื ืฉื ืืชืจ ืืื ืืืคืฉืจ ืชืืืื ื-HTTP/3
events {
worker_connections 1024;
}
http {
server {
# Enable QUIC and HTTP/3.
listen 443 quic reuseport;
# Enable HTTP/2 (optional).
listen 443 ssl http2;
ssl_certificate cert.crt;
ssl_certificate_key cert.key;
# Enable all TLS versions (TLSv1.3 is required for QUIC).
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
# Request buffering in not currently supported for HTTP/3.
proxy_request_buffering off;
# Add Alt-Svc header to negotiate HTTP/3.
add_header alt-svc 'h3-27=":443"; ma=86400';
}
}
ืขืืืื ืื ื ืืชื ืืืชืืืจ ืืืืฆืขืืช HTTP/3 ืืืคืืคื ืื ืจืืืืื, ืื ื ืืชื ืืืฉืชืืฉ --enable-quic
, ืขืืืจ ืื ืืฉืจืช ืฉืื ืื, ืืืฉื, ืืืชืจ quic.rocks ืืขืืื ืืกืื ืืืืืืจ ืืืื ืืืคืชืืื:
ืืืงืื HTTP/3 ืืื ืืชืื http2+quic/99
, ืืื ืื ืืขืฆื ืืืชื ืืืจ.
ืืื ืืืืืืืช ืืืจืืช
- QUIC ืื ืชืืื
LiteSpeed (ืฉืืชืืืจื ืืคืืืกืืืง ืืจื HTTP/3 ืืงืื ืชืจืืขื ืจืื) ืืืชืงืืืชื ืืฉื ืืืื . Apache ืขืืืื ืื ืืืื ืืขืฉืืช ืืช ืื, ืืื ืืขืืืื ืืชืืฆืขืชืืชื ืืคื ืืืื . - 21 ืืื ืืืจ ืขืืืื
ืืืืืช ืชืงื ืขืืืจ WebRTC - ืจืง ืืคื ื ืืื ืืืื ืืืงืจืืกืืคื ื ืคืชืื
ืงืื ืืืฉืื msquic , ืฉืื ืขืืืื ืื ืื ืืคืื ืงืฆืืืช ืืชืงื IETF ืืืื ืืช, ืืื ืื ืืืจ ืคืจืืฆืช ืืจื ืืืืื.
ืืกืงื ื
ืืืชืขื ืืื ืืช ื-QUIC ืืื ื ืืฆืืื, ืื ืืืืจืช, ืื ืืฉืืช ืขืืืื ืืกืื ืืจืืืืฆืื. ืืืฉืืืื ืืืฉืื ืฉื ืืคืจืืืืงืื ืืืคืืขืื ืืืขื ืืื ืืืืฉ, ืืืื ืฉื ื ืืืชืจ ืืืืชืจ ืืคืชืืื ืืฉืืื ืขืื ืฉ-QUIC ืืื ืืขืชืื. ืืคืฉืจ ืืคืืื ืืืืื ืืช ืืคืจืืืืงืื ืืืจืกืืืช ืขืชืืืืืช ืฉื ืืืกื ืืช ื-TCP, ืื ืฉืืืืจ ืฉืืืืงืื ืื ืืืืืืจ ืื ืืืื ืืจื ื ืืขืืืจ ืืืืืืจืื ืืฆืืืื ืืืืืจืื ืืืชืจ.
ืืืจ ืขืืฉืื ืืชื ืืืื ืืืืืืจ ืืื ืืจืืงืฆืื QUIC ืขืืืจ ืืชืฉืชืืช ืฉืื ืื ืืคืืื ืืชืช ืืืชื ืืืคืืคื ืื - ืืืื ืืชืื ื ืื ืืืืกืืฃ ืชืืืื ืืคืจืืืืงืื, ืืืกืืืืกืืืงื ืืขืฆืืื ืขื caniuse ืชืืคืื ืืืืืช ืขืืืื ืืืชืจ.
ืืงืืจ: www.habr.com