Na początku czerwca ogłoszono nową specyfikację protokołu HTTP – HTTP/3 w ramach organizacji IETF (RFC 9114). Jest to pierwsza, oficjalna “aktualizacja” od 2015 roku.
Najważniejsze zmiany:
- wykorzystuje protokół UDP zamiast TCP
- korzysta z QUIC
QUIC (Quick UDP Internet Connections) - protokół komunikacji warstwy transportowej, opracowany w Google w 2012 roku, oparty o UDP, pozwala na wykorzystanie multipleksu, nie powoduje blokady kolejnych requestów bez potwierdzenia
HTTP/3 zostało ogłoszone jako propozycja standardu, a jego wsparcie po stronie .NET (7, rc-1) ciągle jest określone jako eksperymentalne.
Największe zalety protokołu zobaczymy obserwując jak nawiązywane i utrzymywane jest połączenie. Sam protokół wymusza stosowanie TLS v1.3 lub wyższy. Protokół pozwala również na ponowne wykorzystanie zestawionego połączenia do momentu aż nie będą wykonywane kolejne operacje (np. klient zamknie stronę) lub serwer zamknie połączenie. W ramach jednego połączenia (klient -> serwer, a właściwie klient -> IP), nie powinno się otwierać więcej niż 1 połączenia. Więcej połączeń dla 1 adresu IP, na tym samym porcie UDP, może być otwarte korzystając z innych mechanizmów transportu lub konfiguracji TLS, aczkolwiek powinno się unikać tworzenia wielu połączeń z tą samą konfiguracją. W sytuacji, w której serwer nie pozwala na ponowne wykorzystanie dla danego źródła może zwrócić status 421 (Misdirected Request). Ponadto dla ustanowionego połączenia nie trzeba za każdym requestem ustanawiać “handshake’u” (nie znam dobrego, polskiego, pojedyńczego słowa dla określenia czym jest handshake).
Dodatkowo wszystkie połączenia są szyfrowane w warstwie transportu, podczas gdy w przeszłości odbywało się to osobno dla warstwy transportu i osobno dla warstwy aplikacji. Dzięki temu, w trakcie jednego zapytania, ustanawia się szyfrowanie co przyśpiesza znacznie możliwość rozpoczęcia transmisji danych.
Jeśli chcesz w dalszych szczegółach poznać protokół HTTP/3, w tym ramki to zajrzyj do specyfikacji IETF (RFC 9114).