Trudno w to uwierzyć, ale protokół HTTP nie skończył nawet 30 lat. HTTP początkowo został stworzony w 1989 roku i został nazwany WorldWideWeb. Dopiero w 1991 roku, standard komunikacji pomiędzy przeglądarką internetową a serwerem, czyli Hypertest Transfer Protocol opisano w specyfikacji HTTP 0.9.
Wersje protokołu HTTP
Aby dostrzec jakie usprawnienia niesie ze sobą nowy standard przesyłu danych – HTTP/3 – przyjrzymy się krótkiej historii kolejnych wersji specyfikacji HTTP.
Protokół HTTP 0.9
- Rok powstania: 1991.
- Wykorzystywany protokół: TCP.
- Tryb pracy: żądanie-odpowiedź.
- Obsługiwane metody: GET.
- Typ odpowiedzi: Hipertekst.
Protokół HTTP 1.0
- Rok powstania: 1996.
- Funkcjonalności ze specyfikacji HTTP 0.9.
- Obsługa dodatkowych metod: HEAD, POST.
- Obsługa dodatkowych typów odpowiedzi: Skrypty.
- Możliwość dodawania nagłówków (np. Content-Type).
- Obsługa kodów błędów.
Protokół HTTP 1.1
- Rok powstania: 1997.
- Funkcjonalność ze specyfikacji HTTP 1.0.
- Obsługa dodatkowych metod: DELETE, PUT, OPTIONS, TRACE, CONNECT.
- Zoptymalizowano połączanie poprzez wprowadzenie przetwarzania potokowego, które umożliwia wysłanie następnego żądania, zanim zostanie wysłana pełna odwiedź na poprzednie żądanie.
- Główna różnica polega na wykorzystywaniu jednego połączenia TCP do pobierania różnych danych – w poprzedniej wersji, do każdego zapytania było otwierane nowe połączenie, co znacznie spowalniało czas ładowania stron internetowych.
Protokół HTTP 2.0
- Rok powstania: 2015.
- Funkcjonalność ze specyfikacji HTTP 1.1.
- Czysty protokół TCP został przepisany na protokół SPDY, bazujący na TCP, ale ukierunkowany na prędkość komunikacji przeglądarki z serwerem (wykorzystuje m.in. kompresje i manipulacje pakietami). SPDY został stworzony przez Google.
- Główna zmiana polegała na pakowaniu danych w ramki i wysyłanie ich do serwera, wszystko po to aby jak najbardziej zminimalizować opóźnienia.
Jakie nowości niesie HTTP/3 ?
Wykorzystuje nowy, opracowany przez Google, protokół QUIC. Bazuje on na protokole UDP – wcześniejsze standardy HTTP bazowały na protokole TCP, lub jak w przypadku HTTP 2.0 – SPDY. Powodem przejścia ze standardu TCP na UDP był problem związany z blokadą żądania HTTP, aż do czasu uzyskania odpowiedzi. UDP jest szybszy i wprowadza mniejsze opóźnienia niż TCP. Dzięki protokołowi HTTP/3 osiągniemy:
- Poprawienie kontroli zasobów
- Skrócenie czasu nawiązywania połączenia
- Ulepszenie szyfrowania i uwierzytelniania
- Ogólne poprawienie wydajności połączenia przeglądarki z serwerem
Warstwy komunikacji
Upraszczając – warstwa transmisyjna w ruchu sieciowym korzysta z jednego z dwóch protokołów – TCP (Transmission Control Protocol) lub UDP (User Datagram Protocol). Protokół HTTP niezależnie od wersji, należy do najwyższej warstwy komunikacyjnej (warstwy aplikacji) i jako taki nie odpowiada, za bezpośrednią komunikację z serwerem. Polecenia protokołu HTTP są „tłumaczone” na protokół TCP/UDP, które to z kolei pozwalają wymieniać dane między urządzeniami sieciowymi. Główną różnicą po między TCP a UDP jest to, że przy komunikacji z użyciem protokołu TCP – odbiorca danych potwierdza klientowi ich otrzymanie w nienaruszonym stanie. Natomiast w przypadku protokołu UDP klienta nie interesuje czy dane doszły do serwera (nie otrzymuje potwierdzenia). Dzięki temu komunikacja po przez UDP zawiera mniej kroków, gwarantując większą wydajność.
SPDY (TCP) vs QUIC (UDP)
Współczesny protokół TCP jest efektem prac na przestrzeni dziesięcioleci, kiedy sukcesywnie rozszerzano protokół o nowe usprawnienia. Kiedy rozpoczęto opracowywanie standardu HTTP/2 – głównym celem było wyeliminowanie blokowania nagłówka, w którym zalegające żądanie skutecznie blokowało całe połączenie, aż do momentu otrzymania odpowiedzi. W trakcie dalszych prac okazało się, że samo blokowanie nagłówka jest obecne również w samym protokole TCP. W skrócie – jeśli podczas transmisji jeden pakiet zostanie utracony, odbiorca TCP wstrzymuje odbiór pozostałych pakietów, w konsekwencji aplikacja musi zaczekać na retransmisję, nawet jeśli w tym czasie mogłaby otrzymać inne pakiety.
Protokół QUIC, dzięki zastosowaniu UDP wprowadza niezależne strumienie. W przypadku zgubienia jednego z wielu pakietów – nie powoduje to blokady odczytu innych pakietów, ponieważ każdy pakiet posiada swój niezależny strumień. Jest to kluczowe przy poprawie wydajności łączy podatnych na błędy.
Porównanie czasów oczekiwania protokołów HTTP
Ma być szybciej i bezpieczniej (obowiązkowy TLS 1.3+ w przeciwieństwie do TLS 1.2 wykorzystywanym w HTTP/2). Dodatkowo zmniejszono ilość wymaganej konfiguracji przy nawiązywaniu połączenia. Kiedy klient nawiązuje szyfrowane połączenie, pakiet odpowiedzi zawiera dane potrzebne klientowi do korzystania z szyfrowania. Eliminuje to konieczność konfigurowania połączenia TCP, aby następnie ustalić protokół bezpieczeństwa za pomocą wymiany dodatkowych pakietów.
Wnioski
Ze zmian, jakie wprowadza nowy protokół HTTP/3 najistotniejsza jest zmiana protokołu transportowego. Zmiana ta przyśpiesza streaming danych o około 30%. Najpopularniejsze serwisy takie jak: FaceBook, Netflix już wykorzystują dobrodziejstwa protokołu HTTP/3. Poniżej jako ciekawostkę zamieszczę wykres popularności nowego standardu.
Gdybyś potrzebował jeszcze więcej:
Jesteś Java Developerem?
Przejdź na wyższy poziom wiedzy
„Droga do Seniora” 🔥💪
Jesteś Team Leaderem? Masz zespół?
Podnieś efektywność i wiedzę swojego zespołu 👌