HTTP/3 przy pierwszej wizycie: jak klient odkrywa protokół i co odpowiedziało dwadzieścia stron

Spis treści
Wersji protokołu nie da się po prostu zażądać. HTTP/1.1 i HTTP/2 uzgadnia się podczas szyfrowanego nawiązywania połączenia, w kroku, w którym obie strony wyliczają, co potrafią. HTTP/3 nie może w tym kroku uczestniczyć, bo w ogóle nie używa tego samego rodzaju połączenia.
Dwadzieścia dużych stron otwarto po jednym razie. Sześć z nich mówi HTTP/3. Ani jedno z dwudziestu połączeń go nie użyło.

Co HTTP/3 robi inaczej
HTTP/1.1 i HTTP/2 działają oba przez TCP. HTTP/3 działa przez QUIC, a ten siedzi na UDP.
Praktyczny zysk leży w obchodzeniu się ze stratami. Przy HTTP/2 kilka zapytań dzieli jedno połączenie TCP, a jeden zgubiony pakiet hamuje je wszystkie, dopóki nie zostanie wysłany ponownie: każdy strumień czeka na jeden. QUIC trzyma strumienie niezależnie, więc zgubiony pakiet opóźnia tylko to, do czego należał.
Ceną jest zupełnie inna droga transportu. Kto chce HTTP/3, musi otworzyć połączenie UDP do portu, na którym ktoś nasłuchuje albo i nie – a tego nie da się sprawdzić podczas nawiązywania TCP, bo nawiązywania TCP nie ma.
Skąd program dowiaduje się, że istnieje HTTP/3
Są dwie drogi i obie muszą wyprzedzać połączenie, które miałoby ich użyć.
Pierwsza to nagłówek. Serwer odpowiadający przez HTTP/2 może dołożyć Alt-Svc: h3=":443". Znaczy to: tę samą treść można dostać także przez HTTP/3 na tym porcie, a oferta obowiązuje przez tyle a tyle sekund. Program to zapamiętuje i używa następnym razem.
Druga to DNS. Wpis HTTPS może nazwać protokół, zanim w ogóle istnieje połączenie, i tylko ta droga działa przy naprawdę pierwszej wizycie.
Obie są zapowiedziami, żadna nie jest zapytaniem. Zwyczajne wypróbowanie HTTP/3 z odwrotem nie wchodzi w grę, bo nieudana próba UDP kosztuje czas oczekiwania, a ten jest gorszy niż rezygnacja.
Co odpowiedziało dwadzieścia stron
2 września 2026 program obsługujący HTTP/3 otworzył każdą stronę raz, podążając za przekierowaniami. Wszystkie dwadzieścia stron odpowiedziało statusem 200.
Osiemnaście połączeń powstało przez HTTP/2. Dwa przez HTTP/1.1: nginx.org i www.gnu.org, obie to wiekowe strony projektowe.
Ani jedno przez HTTP/3 – także nie przy tych sześciu stronach, których odpowiedź to zapowiadała. Zapowiedź tkwi bowiem w odpowiedzi, a w tym momencie połączenie już dawno powstało.

Drugie zapytanie wygląda inaczej
Trzy ze stron zapytano potem dwa razy pod rząd, przy czym program zachował to, co powiedziano mu za pierwszym razem.
Przy cloudflare.com, bbc.com i w3.org pierwsze zapytanie poszło przez HTTP/2, a drugie przez HTTP/3 – za każdym razem. Na serwerze nic się w międzyczasie nie zmieniło. Jedyną różnicą było to, że program był tam już raz.
Tak wygląda rozpowszechnienie HTTP/3 w praktyce: pierwsza strona wizyty nigdy nie jedzie tą drogą, wszystko po niej być może tak. Czy to waży, zależy od tego, jaką część wizyty stanowi pierwsze zapytanie – przy jednej przeczytanej i opuszczonej stronie całkiem sporą.
Zapowiedziane i nieosiągalne, i odwrotnie
Dwie strony wypadły ze wzoru w przeciwnych kierunkach.
python.org zestawiała każde wymuszone połączenie HTTP/3, ale nie wysyłała nagłówka Alt-Svc ani nie miała wpisu DNS. Protokół jest używany i nigdzie niezapowiadany, przeglądarka nie ma więc jak się o nim dowiedzieć.
spiegel.de zapowiadał HTTP/3 w odpowiedzi, lecz pięć wymuszonych prób z tej sieci nigdy nie doszło do skutku. To wypowiedź o tym pomiarze, a nie o stronie: połączenie UDP może po drodze polec z powodów niemających nic wspólnego z serwerem.
Droga przez DNS okazała się równie rzadka. Z dziesięciu sprawdzonych nazw wpis HTTPS miały trzy: cloudflare.com, www.cloudflare.com i w3.org.
Co z tego wynika
Dla prowadzenia strony użyteczna jest kolejność.
Wysyłanie Alt-Svc kosztuje jeden nagłówek i przenosi każde zapytanie po pierwszym na HTTP/3. To połowa tania, i ma ją sześć z dwudziestu stron.
Wpis HTTPS w DNS to połowa sięgająca już pierwszego zapytania i akurat jej prawie nikt nie ustawił. Tam, gdzie wizyta składa się zwykle z jednej strony, właśnie tam leżałby zysk.
A pomiar, czy strona obsługuje HTTP/3, odpowiada na inne pytanie niż to, czy strona jest używana przez HTTP/3. Te dwadzieścia obsługuje jedno, a użyto ich z drugim.
Jak zbudowany jest wpis HTTPS, jakie parametry przenosi i co według osobnego pomiaru z 5 września 2026 r. publikowało w nim dwadzieścia domen, opisuje artykuł Rekord HTTPS w DNS: znaleźć HTTP/3 bez objazdu.
Pytania i odpowiedzi
Co musi się zgadzać w sieci, zanim strona zacznie wysyłać Alt-Svc?
Port UDP 443 musi być otwarty na całej drodze. Wiele konfiguracji jest przygotowanych wyłącznie pod TCP: zapora serwera przepuszcza 443/tcp, router przekierowuje tylko TCP, filtr dostawcy przed serwerem nie przepuszcza UDP. HTTP/2 działa wtedy bez zarzutu i nic nie wskazuje na problem.
Jeśli strona wysyła w takim stanie Alt-Svc, przeglądarki przy następnym zapytaniu trafiają na próbę połączenia, która nigdy się nie udaje. Wracają do HTTP/2, ale artykuł podaje cenę: nieudana próba UDP kosztuje czas oczekiwania. Zapowiedź spowalnia wtedy stronę, zamiast ją przyspieszać.
Pomagają dwie rzeczy. Po pierwsze, sprawdzenie spoza własnej sieci programem, który potrafi wymusić HTTP/3; jak pokazuje przypadek spiegel.de, wynik zależy od drogi. Po drugie, krótka wartość ma w nagłówku, czyli czas ważności zapowiedzi w sekundach. Bez ma zapowiedź obowiązuje według RFC 7838 przez 24 godziny i tak długo błędna zapowiedź pozostaje w obiegu, nawet jeśli już ją usunięto.
Czy HTTP/3 się liczy, gdy przed stroną stoi CDN?
Tak, ale tylko na odcinku między przeglądarką a CDN. Serwer źródłowy za nim może dalej mówić HTTP/1.1 albo HTTP/2, a nagłówek Alt-Svc wysyła wtedy zwykle CDN, a nie serwer źródłowy.
Jak wygląda wpis HTTPS w DNS?
W najprostszej postaci tak:
example.com. 3600 IN HTTPS 1 . alpn=h3,h2
Liczba 1 to priorytet, który wskazuje, że wpis niesie parametry usługi; kropka za nią oznacza tę samą nazwę; alpn wymienia protokoły, którymi mówi serwer. Przeglądarka, która odpytuje ten wpis, wie więc już przed pierwszym połączeniem, że HTTP/3 jest dostępne.
Wiążą się z tym dwa warunki. Dostawca DNS musi obsługiwać typ wpisu HTTPS, a nie każdy to robi. Wpis nie zastępuje też otwartego portu UDP 443: tak jak Alt-Svc tylko zapowiada, a zapowiedź bez osiągalnego portu kosztuje ten sam czas oczekiwania, tym razem już przy pierwszej wizycie.