Protokół HTTP (ang. Hypertext Transfer Protocol) to w wielkim skrócie zestaw reguł według których przebiega komunikacja w sieci Web. Komunikacja ta to nic innego jak żądania klienta (czyli najczęściej przeglądarki WWW) dotyczących pewnych danych oraz odpowiedź serwera HTTP na te żądania.
Duża popularność i fakt, że protokół HTTP od lat 90. nie był modernizowany nie wynika z jego wyjątkowych czy złożonych mechanizmów ale właśnie z jego uniwersalności i prostoty działania – np. z bezstanowości.
HTTP/2 (bo właśnie tak wygląda poprawna pisownia) to kolejna wersja i unowocześnienie tego protokołu. Został opracowany z inicjatywy Google ale w ramach IETF (Internet Engineering Task Force) czyli organizacji, która od 1986 roku standaryzuje Internet i sieci komputerowe. Specyfikacja protokołu HTTP/2 znajduje się w dokumencie RFC7540 z maja 2015.
Różnice HTTP/2 a HTTP 1.1
Multipleksowanie HTTP/2
HTTP/2 wprowadza multipleksowanie czyli możliwość równoległego pobierania wielu zasobów za pomocą jednego połączenia TCP.
W przypadku protokołu HTTP / 1.x, jeśli klient chce wysyłać wiele równoległych żądańnawiązuje do tego celu wielu połączeń TCP. To zachowanie jest bezpośrednią konsekwencją modelu dostarczania HTTP / 1.x, który zapewnia, że tylko jedna odpowiedź może być dostarczana jednocześnie na połączenie – jest to tzw. kolejkowanie odpowiedzi (ang. response queuing). Co gorsza, skutkuje to również blokowaniem na początku linii i nieefektywnym wykorzystaniem bazowego połączenia TCP.
Nowa, binarna warstwa ramkowania w HTTP/2 usuwa te ograniczenia i umożliwia pełne multipleksowanie żądań i odpowiedzi, umożliwiając klientowi i serwerowi rozbicie wiadomości HTTP na niezależne ramki, przeplatanie ich, a następnie ponowne złożenie z drugiej strony.
Możliwość podziału wiadomości HTTP na niezależne ramki, przeplatania ich, a następnie ponownego złożenia na drugim końcu jest najważniejszym ulepszeniem nowej wersji HTTP. Daje to masę korzyści wydajnościowych na całym „stosie” wszystkich technologii sieciowych, umożliwiając nam przykładowo:
- przeplatanie wielu żądań równolegle bez blokowania któregokolwiek z nich,
- przeplatanie wielu odpowiedzi równolegle, nie blokując żadnej z nich,
- użycie pojedynczego połączenia, aby równolegle dostarczać wiele żądań i odpowiedzi,
- usunięcie niepotrzebnych obejść HTTP / 1.x takie jak scalanie plików z zasobami, stosowanie sprites przy plikach graficznych,
- zapewnia niższe czasy ładowania strony, eliminując niepotrzebne opóźnienia i poprawiając efektywność sieci Internet, itp.

HTTP/2 Push
Druga sprawa to HTTP/2 Push, czyli możliwość wysłania zasobów strony do przeglądarki jeszcze zanim o nie zapyta. Załóżmy, że mamy stronę WWW index.html z trzema zasobami: styles.css, scripts.js i img.webp. Gdy użytkownik łączy się z danym URL, przeglądarka automatycznie pobiera plik index.html. Gdy przeglądarka analizuje kod HTML tej podstrony znajduje odwołania do styles.css, scripts.js i obrazka img.webp. W tym momencie przeglądarka wysyła kolejne żądania dla poszczególnych zasobów. Aby wyrenderować całą stronę, przeglądarka wysyła takie żądania w trybie Just-In-Time, po prostu stopniowo „odkrywa” poszczególne zasoby a potem je pobiera i uwzględnia przy renderowaniu. Jak można się domyślić, takie działanie znacznie opóźnia wczytywanie się strony w przeglądarce.
Tutaj wkracza HTTP/2 Push, dzięki którym serwer może niejako przejąć inicjatywę dzięki regułom, które wysyłają do przeglądarki treści jeszcze zanim przeglądarka o nie zapyta. W tym przykładowym scenariuszu serwer „wie”, że każdy, kto zażąda pliku index.html, będzie potrzebował jeszcze styles.css, scripts.js i img.webp – więc może natychmiast przekazać go klientowi – nie czekając na jego żądanie. Jeśli zostanie to wykonane poprawnie, zanim przeglądarka zakończy parsowanie pliku index.html, transfer wspomnianych plików styles.css, scripts.js i obrazka img.webp już się rozpocznie, a może i nawet zakończy, eliminując opóźnienie, które towarzyszy sposobowi działania stron internetowych od początku ich dziejów.
Aktualizacja:
Niestety HTTP/2 Push nie jest już wspierany i rozwijany. Źródło: https://evertpot.com/http-2-push-is-dead/
Możliwość priorytetyzacji zasobów
Gdy wiadomość HTTP może zostać podzielona na wiele pojedynczych ramek, a my pozwalamy na multipleksowanie ramek z wielu strumieni, kolejność, w której ramki są przesyłane staje się krytycznym czynnikiem wpływającym na wydajność dlatego standard HTTP/2 pozwala, aby każdy strumień miał własną wagę:
- każdemu strumieniowi można przypisać wagę całkowitą od 1 do 256,
- każdy strumień może mieć wyraźną zależność od innego strumienia.
Połączenie zależności i wag strumienia umożliwia klientowi zbudowanie i przekazanie „drzewa priorytetów”, które wyraża sposób, w jaki wolałby otrzymywać odpowiedzi. Z kolei serwer może wykorzystać te informacje do nadania priorytetu przetwarzaniu strumienia poprzez kontrolowanie alokacji procesora, pamięci i innych zasobów, a gdy dane odpowiedzi są dostępne, alokacji przepustowości w celu zapewnienia optymalnego dostarczania odpowiedzi o wysokim priorytecie do klienta.
Protokół HTTP / 2 pozwala również klientowi zaktualizować te preferencje w dowolnym momencie, co umożliwia dalsze optymalizacje w przeglądarce. Innymi słowy, możemy zmieniać zależności i ponownie przypisywać wagi w odpowiedzi na interakcję użytkownika i inne sygnały.
Binarny format przesyłu nagłówków
Fundamentem wszystkich tych ulepszeń (mających wpływ na wydajność komunikacji w ramach protokołu HTTP/2) jest nowa binarna warstwa ramkowania, która określa sposób enkapsulacji i przesyłania wiadomości HTTP między klientem a serwerem.
W przeciwieństwie do protokołu HTTP / 1.x, który do komunikacji używa formaty tekstowego, cała komunikacja HTTP/2 jest podzielona na mniejsze wiadomości i ramki, z których każda jest zakodowana w formacie binarnym. W rezultacie zarówno klient, jak i serwer muszą korzystać z nowego mechanizmu kodowania binarnego, aby się zrozumieć.
Kompresja HPACK
Każdy transfer HTTP zawiera zestaw nagłówków opisujących przesyłany zasób i jego właściwości. W HTTP 1.x to wszystko zawsze jest wysyłane jako zwykły tekst, samo to marnuje wiele kilobajtów transferu tym bardziej jeśli używane są pliki cookie HTTP. Aby zmniejszyć ten narzut i poprawić wydajność, w HTTP/2 kompresuje się metadane nagłówka żądania i odpowiedzi przy użyciu formatu kompresji HPACK, który wykorzystuje proste i znane techniki: statyczny kod Huffmana i metodę słownikową.
Przy tym wszystkim HTTP/2 jest w pełni kompatybilny wstecznie z HTTP 1.1 co oznacza, że nowa wersja nie sprawia problemów w przypadku dysponowania starszymi urządzeniami klienckimi. Połączenie będzie wówczas działać „po staremu”.
Zalety HTTP/2
- szybkość działania – dzięki wprowadzonemu w tym protokole multipleksingowi, który zmniejsza się ilość połączeń TCP, mechanizmowi Push i kompresji HPACK co naturalnie przyspiesza transfer danych w trojaki sposób,
- odciążenie serwera – dzięki szybkości połączenia serwer przez dłuższy czas pozostaje w stanie bezczynności co zrównolegla obsługę klientów lub może pozwolić na obsługę dużo większego ruchu w tej samej konfiguracji,
- bezpieczeństwo – HTTP/2 jest kolejnym bodźcem do wdrożenia certyfiaktu SSL,
- równoległe pobieranie zasobów – od tej pory zasoby nie są kolejkowane i kilka zasobów może być pobieranych na raz w jednym połączeniu TCP,
- możliwość nadawania priorytetów zasobom – możemy decydować, które zasoby mają się pobierać wcześniej od innych,
- szerokie wsparcie popularnych przeglądarek – od 2015 roku nowa wersja protokołu jest obsługiwana przez Google Chrome, Opera, Mozilla Firefox, Microsoft Internet Explorer 11 wzwyż, Safari, Silk i Edge.
- mniejsza podatność na błędy – dzięki binarnej metodzie informacji,
- pełna wsteczna kompatybilność – włączenie HTTP/2 nie powoduje zerwania zgodności z HTTP 1.1
Wady HTTP/2
- HTTP/2 wymusza SSL, to z jednej strony wielka zaleta ale z drugiej, wzrost wydajności HTTP/2 może nie być tak duży w stosunku do serwerów do tej pory nie korzystały z szyfrowania SSL,
- konieczność wykonania dodatkowej pracy administracyjnej (starsze dystrybucje mogą wymagać pobrania paczki nowszej wersji Apache z nieoficjalnych rezpoytoriów).
- brak możliwości wykorzystania w najtańszych hostingach – jeżeli jesteś przywiązany do mało nowoczesnego dostawcy hostingu współdzielonego, HTTP/2 może być poza Twoim zasięgiem.
Wpływ HTTP2 na SEO i pozycjonowanie
Czy HTTP/2 wpływa na pozycjonowanie stron? Jak każda inicjatywa zwiększająca wydajność i bezpieczeństwo sieci, która dodatkowo powstaje z inicjatywy Google jest promowana przez Google. Strony hostowane na serwerach wykorzystujących HTTP/2 z pewnością są kilka punktów do przodu. Zresztą ta sama sytuacja dotyczyła:
- responsive web design,
- certyfikatów SSL,
- PWA – progressive web apps,
- danych strukturalnych,
- czy obrazków w formacie webp.
Punkty te odnoszą się do tzw. technicznego SEO (ang. technical SEO), czyli spraw nie związanych bezpośrednio z zawartością strony a mogących decydować o kolejności stron w wynikach wyszukiwania za sprawą:
- zwiększenia ogólnej wydajności strony,
- zwiększenia ekonomiczności indeksowania.
Warto wspomnieć, że obecnie z powodu niewiedzy i powszechnej ignorancji dotyczącej zaawansowanych opcji hostingu, jeszcze stosunkowo mało witryn wykorzystuje protokół HTTP/2 i jest to ciekawa i stosunkowo tania opcja na znaczny upgrade własnej witryny.

Jak widać, HTTP2 jest wspierane po HTTPS w niemal wszystkich popularnych przeglądarkach.
Jak zainstalować i włączyć HTTP/2?
HTTP/2 można zainstalować na większości serwerów HTTP. Przykładowo w takim Apache2 instalacja HTTP2 ogranicza się do kilku kroków:
- Włączenie certyfikatu SSL (jeżeli do tej pory nie był włączony)
- Włączenie modułu http2 (sudo a2enmod)
- Restart serwera
- Edycja pliku httpd.conf:
- odkomentowanie linijki LoadModule http2_module modules/mod_http2.so
- dodanie Protocols h2 http/1.1 w pliku httpd.conf lub w tagach <VirtualHosts>)
Jak sprawdzić i przetestować czy HTTP/2 działa poprawnie?
Mamy dwie możliwości, jedna to użycie jednej z kilku stron służących do testowania serwera pod kątem obsługi HTTP/2:
- https://tools.keycdn.com/http2-test
- https://http2.pro/
- https://www.dareboost.com/en/website-speed-test-http2-vs-http1


Druga technika to użycie przeglądarki:
- włączamy konsolę w Google Chrome klawiszem F12,
- wybieramy zakładkę Network (jeżeli jest ukryta).
Wartość h2 w tej kolumnie świadczy o aktywnym protokole HTTP/2 dla konkretnego zasobu.

Czy HTTP/2 realnie wpływa na wydajność strony?
Tak. Indeks szybkości jest znacznie większy. Rozpoczęcie renderowania strony przebiega szybciej. Rokuje to uzyskanie dużo lepszych parametrów FCP i FID, które składają się na wskaźniki Core Web Vitals.

Podsumowanie
Czy warto włączyć HTTP/2? Oczywiście, że tak. Mimo, że dopiero ok. 15% witryn korzysta z tego standardu, jest wiele praktycznych zalet wykorzystywania tej nowej wersji protokołu HTTP. To właśnie teraz jest szansa na wykorzystanie jego zalet związanych z SEO.
Biorąc pod uwagę, że i tak większość stron działa w pełnym szyfrowaniu SSL warto zrobić ten kolejny krok w kierunku Internetu przyszłości. Jeżeli na Twoim hostingu nie można włączyć trybu HTTP/2 być może to czas na zmianę dostawcy hostingu lub przesiadkę na VPS?
Źródła
- https://tools.ietf.org/html/rfc7540#section-8.2,
- https://developers.google.com/web/fundamentals/performance/http2/,
- https://caniuse.com/
Odpowiedz lub skomentuj