HTTP/3

Najnowsza wersja HTTP działająca na protokole QUIC zamiast TCP. Zmniejsza opóźnienia i lepiej radzi sobie z utratą pakietów.

HTTP/3 to najnowsza wersja protokołu HTTP, w której warstwę transportową bierze na siebie QUIC działający na UDP, a nie — jak w HTTP/1.1 i HTTP/2 — na TCP. W praktyce: te same nagłówki, metody i kody odpowiedzi, które znasz, tylko spakowane w szybszy, szyfrowany kanał. Standard opisuje RFC 9114 (z 2022 r.), a sam QUIC — RFC 9000. Szyfrowanie nie jest opcją: HTTP/3 zawsze jedzie po TLS 1.3, wbudowanym w QUIC.

Po co to komu

Głównym problemem HTTP/2 było head-of-line blocking na poziomie TCP. Jeden zgubiony pakiet zatrzymywał wszystkie strumienie multipleksowane w jednym połączeniu, bo TCP gwarantuje kolejność dostarczania. QUIC rozwiązuje to, zarządzając strumieniami niezależnie — jeśli pakiet jednego strumienia przepadnie, reszta leci dalej. Mniej czekania, mniejsze opóźnienia, szczególnie na słabych łączach mobilnych.

Drugi smaczek to szybsze nawiązywanie połączenia. QUIC łączy handshake transportu i TLS w jedno, a przy ponownym połączeniu potrafi wysłać dane już w pierwszym pakiecie (0-RTT). Dochodzi jeszcze connection migration: połączenie identyfikuje connection ID, a nie para IP/port, więc gdy przeskakujesz z Wi-Fi na LTE, sesja nie pada — telefon nie zrywa pobierania w połowie.

Jak to sprawdzić w praktyce

Najprościej przez curl z flagą wymuszającą wersję:

curl --http3 -I https://cloudflare-quic.com

W odpowiedzi zobaczysz HTTP/3 200. Jeśli klikasz w przeglądarce, otwórz DevTools, zakładkę Network, dodaj kolumnę „Protocol” — przy zasobach z HTTP/3 pojawi się h3. Serwer ogłasza wsparcie nagłówkiem Alt-Svc: h3=":443", który mówi przeglądarce „następnym razem spróbuj po QUIC”.

Na co uważać

Najczęstszy mit: „HTTP/3 zawsze jest szybszy”. Nie zawsze — przy szybkim, stabilnym łączu różnica bywa kosmetyczna, a zyski widać dopiero przy stratach pakietów i wysokim RTT. Drugi problem: QUIC chodzi po UDP na porcie 443, a sporo firmowych firewalli i starszego sprzętu blokuje albo dławi UDP — wtedy przeglądarka cicho spada z powrotem do HTTP/2. Pamiętaj też, że pierwsze połączenie i tak idzie po TCP/HTTP/2, dopóki klient nie zobaczy Alt-Svc. I nie myl 0-RTT z darmowym obiadem: dane 0-RTT są podatne na replay, więc nie wrzucaj tam żądań zmieniających stan (np. POST z płatnością).

Pojęcia powiązane: QUIC, TCP, UDP, TLS 1.3, HTTP/2, multipleksowanie strumieni, head-of-line blocking, Alt-Svc, 0-RTT.