Kilka słów o HTTP/2

Kilka słów o HTTP/2


Standardy sieciowe zmieniają się bardzo często. Jedne technologie powstają, a inne kończą swój żywot bardzo szybko. Podczas przeglądania internetu nie zdajemy sobie sprawy z istnienia wielu mechanizmów i technologii. Jedną z takich technologii jest HTTP/2.

HTTP jest klasyfikowany jako protokół sieciowy. Oznacza to, że jest zbiorem procedur i reguł, które ustalają zasady komunikacji pomiędzy co najmniej dwoma urządzeniami sieciowymi. W celu poprawnego działania oba urządzenia muszą w tym samym momencie używać tego samego protokołu sieciowego, w tej samej wersji. Przed rozpoczęciem połączenia sieciowego odbywa się faza „negocjacji” w których urządzenia „dogadują się” odnośnie używanych w czasie transmisji technologii.

Najważniejsze protokoły sieciowe to

  • TCP/IP,
  • FTP,
  • DNS,
  • DHCP,
  • HTTP.

Protokół HTTP

HTTP to podstawowy protokół sieciowy używany do obsługi stron www. Jest on używany do przesyłania dokumentów hipertekstowych, umożliwia także przesyłanie żądania udostępnienia dokumentów www. Jest bezstanowym protokołem w warstwie aplikacji wykorzystywanym od lat 90. XX wieku.

Komunikacja pomiędzy klientem a serwerem wygląda w uproszczony sposób następująco:

  1. Przeglądarka (klient) wysyła prośbę do serwera o udostępnienie zasobów np. zawartości strony głównej.
  2. Serwer odpowiada na żądanie poprzez wysłanie danych stanowiących zawartość strony.

Protokół ten przyjmuje i wysyła odpowiedzi składające się z nagłówka żądania oraz treści dokumentu. Używa on różnych metod np. GET i POST.
Więcej o protokole HTTP można przeczytać w naszym wpisie: Protokół HTTP i HTTPS – podstawowe różnice.

Protokół HTTP/2

HTTP/2 (zapisywane także jako HTTP2 lub HTTP.2) jest rozwinięciem protokołu HTTP. Idea protokołu opiera się na założeniach do protokołu SPDY, którego twórcami są inżynierowie Google. Pierwsze wzmianki o następcy HTTP 1.1 pojawiły się w 2014 roku. Po roku prac specyfikacja protokołu była już gotowa.

HTTP vs HTTP/2

Różnice pomiędzy dwoma wersjami protokołu są dość znaczne. Technologiczna przepaść, która dzieli oba rozwiązania to ponad 18 lat. W tym czasie wiele zmieniło się w technologiach tworzenia stron. Aplikacje www są złożone, mają dużo zasobów, co wydłuża ich czas ładowania poprzez HTTP.

Podstawowe różnice pomiędzy HTTP a HTTP/2:

  • Protokół HTTP w wersji 2.0 jest binarny, co sprawia, że zarówno klient (przeglądarka), jak i serwer muszą korzystać z tej samej technologii i „rozumieć” komunikaty zawarte w binarnie zakodowanych ramkach. Dzięki temu same wiadomości w tym kanale komunikacji są mniejsze. Niesie to za sobą dodatkowe korzyści w postaci szybkości odpowiedzi, gdyż oprogramowanie serwerowe nie musi dekodować tekstowych nagłówków. Takie rozwiązanie poprawia też w znaczny sposób bezpieczeństwo komunikacji oraz jej niezawodność.
  • W trakcie wizyty użytkownika na stronie nawiązywane jest tylko jedno połączenie. W przeciwieństwie do HTTP 1.x, nowa wersja tego protokołu korzysta tylko z jednego połączenia pomiędzy klientem i serwerem, co sprawia, że nie trzeba co chwilę zestawiać kolejnych połączeń dla przesyłania plików. Zmniejsza to obciążenie serwera oraz czas wyświetlenia (dostępności) poszczególnych zasobów dla użytkownika.
  • Serwer może nadawać poszczególnym zasobom priorytety, co poprawia dostępność do kluczowych zasobów, które mogą być serwowane do przeglądarki użytkownika w pierwszej kolejności. Każdy ze strumieni danych może mieć przypisaną swoją wagę (1-256) oraz zależność od innych strumieni definiowaną jako kolejność wysyłania ramek z daną zawartością.
  • Zastosowanie kompresji HPACK znacznie skraca rozmiary nagłówków żądania i odpowiedzi. Dzięki użyciu algorytmów metody słownikowej i statycznego kodu Huffmana znacznie kompresuje się rozmiary tych nagłówków, co dość mocno poprawia wydajność. W przeciwieństwie do HTTP 1.x dane nagłówków żądań i odpowiedzi nie są wysyłane w „zwykłym tekście” a binarnie, co, jak wspomniano wyżej, pozwala na oszczędność transferu.

Warto też wspomnieć o tym, że zadbano o pełną kompatybilność pomiędzy HTTP 1.x a HTTP/2. Oznacza to, że w przypadku użycia starszych urządzeń negocjowane jest użycie starszej wersji tego protokołu.

Multipleksowanie HTTP/2

Najważniejszą różnicą pomiędzy HTTP 1.x a HTTP/2 jest multipleksowanie, czyli możliwość jednoczesnego pobierania wielu zasobów. Dotychczas połączenie było zestawione w ten sposób, że w ramach niego następowała wymiana wielu żądań, co powodowało tzw. kolejkowanie żądań. Zgodnie z zasadą „pierwszy żądany – pierwszy wysłany” dopiero, gdy zostało obsłużone jedno żądanie można było zająć się kolejnym. HTTP/2 wprowadza możliwość obsługi wielu żądań w ramach jednego połączenia TCP.

Żądania są rozbijane na niezależne od siebie ramki, które po dotarciu do celu są składane. Przeplatanie ramek pozwala na wykonywanie wielu żądań jednocześnie bez ich blokowania i oczekiwania na zakończenie poprzedniego żądania. Użycie jednego połączenia sprawia, że zwiększa się wydajność a serwer jest mniej obciążony. Pozwala to też na osiągniecie mniejszych czasów ładowania się strony www poprzez wyeliminowywanie niepotrzebnych opóźnień.

HTTP/2 push

Dzięki mechanizmowi HTTP Push serwer może sam dosyłać do klienta zasoby (np. pliki), które są niezbędne do poprawnej obsługi żądania związanego z aktualnie przetwarzanym plikiem. Oznacza to, że w przypadku wysłania żądania do serwera z prośbą o udostępnienie zawartości pliku, serwer może też od razu wysłać inne pliki, które są niezbędne do poprawnego wyświetlenia strony – np. pliki skryptów JS, arkuszy stylów CSS czy obrazków. Oprogramowanie serwera robi to bez inicjowania zapytania o żądanie tych plików.

Opcja ta jest jednak nie wspierana i nie będzie dalej rozwijana.

HTTP/2 a certyfikat SSL

Użycie HTTP/2 wymusza na użytkownikach korzystanie z połączenia szyfrowanego, a na właścicielach stron www posiadanie certyfikatu SSL. Stoi za tym decyzja twórców przeglądarek internetowych, które obsługują HTTP/2 tylko poprzez połączenia szyfrowane. Sam standard HTTP/2 nie nakłada takiego obowiązku, ale bez implementacji certyfikatu SSL (który sam w sobie jest czynnikiem rankingowym) nie będzie możliwości skorzystania z zalet HTTP/2.

Typ i rodzaj użytego certyfikatu nie mają wpływu na funkcjonowanie protokołu HTTP/2. Sprawdzą się tutaj zarówno drogie certyfikaty komercyjne, jak i certyfikaty Wildcard albo bezpłatny certyfikat SSL Let’s Encrypt.

Zalety HTTP/2

HTTP/2, w porównaniu z poprzednią wersją protokołu, wprowadza szereg nowych rozwiązań oraz mechanizmów, które sprawiają, że jest on szybszy i wydajniejszy. Najważniejsze z nich to:

  • mniejsza podatność na błędy,
  • priorytetyzacja dla zasobów,
  • bezpieczeństwo,
  • szybkość,
  • skalowalność,
  • równoległe wykonywanie wielu żądań bez konieczności oczekiwania na wykonanie jednego z nich,
  • zdjęcie części prac z serwera, co powoduje mniejsze jego obciążenie,
  • kompresja nagłówków, która oszczędza mnóstwo transferu.

Wpływ HTTP/2 na SEO

Implementacja nowego protokołu jest krokiem naprzód także jeśli chodzi o SEO. Z uwagi na różnice w działaniu pomiędzy HTTP a HTTP/2 strony ładują się znacznie szybciej, gdyż jednocześnie otrzymują więcej zasobów. Ma to oczywiście wpływ na użytkownika, który dostaje szybciej treść podstrony.

Google może traktować obecność HTTP/2 jako jeden z sygnałów rankingowych. We wrześniu 2020, za pośrednictwem swojego bloga, Google poinformowało, że Googlebot będzie odwiedzał i indeksował niektóre strony internetowe z pomocą HTTP/2.

Sama idea protokołu pozwala na znaczne przyspieszenie ładowania się zasobów, co skraca czas oczekiwania użytkownika na dotarcie do interesujących go treści. Już samo to stwierdzenie sprawia, że HTTP/2 jest jedną ze składowych, o które należy zadbać wykonując techniczne prace w zakresie SEO.

Implementacja HTTP/2 wymusza też konieczność stosowania certyfikatu SSL, którego użycie jest traktowane przez Google jako czynnik biorący udział w ustalaniu rankingu. Wymuszenie tej dobrej praktyki przez twórców przeglądarek sprawia, że używając HTTP/2 stosujemy też inne, potwierdzone przez Google, mechanizmy mające wpływ na ranking wyników wyszukiwania.

Które przeglądarki obsługują HTTP/2?

W chwili obecnej wszystkie przeglądarki internetowe wspierają HTTP/2. Jak podaje serwis caniuse.com, zapewnione jest wsparcie dla tego protokołu zarówno przez Chrome, Operę, Firefoxa czy Edge, jak i przez przeglądarki mobilne na systemie Android oraz IOS.

wsparcie przeglądarek dla http/2

Wsparcie ze strony przeglądarki to tylko jedna strona medalu. Aby HTTP/2 zadziałało musi go wspierać także serwer, na którym jest umieszczona strona. Jeśli tak się nie dzieje, przeglądarki negocjują użycie protokołu HTTP 1.1.

Według dostępnych danych, użycie HTTP/2 w lutym 2021 wyniosło już ponad 50%. Jest to wzrost w porównaniu z analogicznym okresem poprzedniego roku o prawie 10%.

Jak sprawdzić, czy moja strona obsługuje HTTP 2.0?

Takie pytanie zostało zadane celowo, gdyż będzie ono nurtować czytających ten wpis właścicieli witryn. Należy jednak nadmienić, że za obsługę HTTP/2 odpowiada serwer, więc na to pytanie powinien odpowiedzieć nasz hostingodawca. Nie da się włączyć obsługi HTTP/2 z poziomu CMS np. WordPress czy Presta Shop. Można za to sprawdzić, czy serwer udostępnia możliwość zestawienia połączenia z wykorzystaniem HTTP/2. Niektóre serwery (jak np. Lite Speed) mają domyślnie skonfigurowaną obsługę HTTP/2, na innych (np. nginx) konieczne jest jej włączenie.

Wynik testu http/2

Na powyższym zrzucie ekranu widoczny jest wynik testu dla domeny widzialni.pl, który pokazuje, że na serwerze, gdzie znajduje się strona, jest włączona obsługa HTTP/2. Za pomocą testera KeyCDN można w łatwy sposób sprawdzić to, czy nasz serwer posiada obsługę takiego protokołu.

HTTP/2 na nginx

Włączenie obsługi HTTP/2 na serwerze nginx jest możliwe. Wystarczy wykonać 4 kroki i wydać kilka komend do swojego systemu operacyjnego znajdującego się na serwerze z nginx, aby włączyć obsługę HTTP/2. Serwer musi przekierowywać ruch z portu 80 na bezpieczny port 443 oraz posiadać obsługę 2048 bitowego klucza DHE.

  1. Włączamy obsługę HTTP/2 zmieniając parametry konfiguracyjne w gałęzi /sites-available/
    listen [::]:443 ssl http2 ipv6only=on;
    listen 443 ssl http2;
  2. Usuwamy stare i niebezpieczne zestawy kluczy kryptograficznych, by nie zostały one zablokowane przez czarną listę HTTP/2
  3. Weryfikujemy, czy HTTP/2 jest włączony, można to zrobić wydając polecenie:
    curl -I -L https://widzialni.pl
  4. Włączamy mechanizm HSTS

Wnioski

Użycie HTTP/2 będzie krokiem naprzód jeśli chodzi o szybkość i bezpieczeństwo w sieci. Poprawi też wrażenia o odczucia użytkowników sieci www. Wymuszenie konieczności korzystania z SSL oraz zastosowane w HTTP/2 mechanizmy mają też wpływ na pozycjonowanie, dając kilka dodatkowych punktów przewagi nad konkurencją…

Kilka słów o HTTP/2
5 (100%) 1 vote

+ Nie ma komentarzy

Dodaj własny

Administratorem Państwa danych osobowych jest Widzialni.pl sp. z o.o. sp. k.
Pełna treść Polityki Prywatności