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:

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:

  1. Włączenie certyfikatu SSL (jeżeli do tej pory nie był włączony)
  2. Włączenie modułu http2 (sudo a2enmod)
  3. Restart serwera
  4. Edycja pliku httpd.conf:
    1. odkomentowanie linijki LoadModule http2_module modules/mod_http2.so
    2. 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:

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.

Różnica w prędkości ładowania strony z wyłączonym HTTP/2 (góra) i włączonym HTTP/2 (dół)

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

Oceń artykuł na temat: HTTP/2 czy warto włączyć, jak zainstalować?
Średnia : 4.7 , Maksymalnie : 5 , Głosów : 11