Dokumentacja
Włącz HTTP/2
Włącz HTTP/2
Przy HTTP/1.1 przeglądarka pobiera z jednej domeny najwyżej około sześciu plików naraz, a pozostałe czekają w kolejce. Typowa strona z 60–100 obrazami, skryptami i stylami ładuje się falami. HTTP/2 wysyła je wszystkie jednocześnie jednym połączeniem, ze skompresowanymi nagłówkami, więc ta sama strona zaczyna się wyświetlać szybciej, najbardziej zauważalnie na telefonie z dużym opóźnieniem. Na stronie nie trzeba niczego zmieniać: HTML, pliki i adresy zostają takie same.
HTTP/2 obsługują wszystkie obecne przeglądarki, a większość serwerów potrafi to od lat; często po prostu nie był włączony. Lista kontrolna strony pokazuje ostrzeżenie, gdy strona jest serwowana tylko przez HTTP/1.1. HTTP/3 też liczy się jako zaliczenie.
Zanim zaczniesz: HTTPS
Przeglądarki używają HTTP/2 tylko przez HTTPS. Strona serwowana nadal przez zwykłe http:// musi najpierw dostać certyfikat i przekierowanie: zobacz Przekieruj HTTP na HTTPS.
Sprawdź sam
Zamiast example.com wpisz swoją stronę:
curl -s -o /dev/null --http2 -w '%{http_version}\n' https://example.com/
openssl s_client -connect example.com:443 -servername example.com -alpn h2 </dev/null 2>/dev/null | grep -i alpn
Pierwsze polecenie wypisuje 2 (albo 3), gdy HTTP/2 działa, i 1.1, gdy nie. Drugie pokazuje, na co serwer zgodził się podczas negocjacji TLS: ALPN protocol: h2 to HTTP/2, a No ALPN negotiated oznacza, że serwer go nie oferuje.
Jak to naprawić
Wybierz serwer, z którym faktycznie rozmawia przeglądarka odwiedzającego. Jeśli strona działa za Cloudflare, jest to Cloudflare, a serwer źródłowy nie ma znaczenia dla tej pozycji.
nginx
Najpierw sprawdź wersję przez nginx -v. W wersji 1.25.1 ustawienie się przeniosło.
nginx 1.25.1 i nowsze, w bloku server { … } strony dla portu 443:
server {
listen 443 ssl;
http2 on;
# …
}
Starszy nginx (na przykład 1.22 na Debianie 12, 1.24 na Ubuntu 24.04): dodaj http2 do linii listen:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
# …
}
Plik strony jest w /etc/nginx/sites-available/ na Debianie i Ubuntu oraz w /etc/nginx/conf.d/ na Rocky, Alma i CentOS. Sprawdź i zastosuj:
sudo nginx -t && sudo systemctl reload nginx
Apache i LiteSpeed
Z dostępem do serwera (Apache). HTTP/2 to mod_http2, dostępny od Apache 2.4.17. Na Debianie i Ubuntu włącz go przez sudo a2enmod http2, na Rocky, Alma i CentOS zainstaluj przez sudo dnf install mod_http2. Następnie dodaj to do <VirtualHost *:443> strony albo raz do głównej konfiguracji dla wszystkich stron:
Protocols h2 http/1.1
Jeden warunek: HTTP/2 nie działa z MPM prefork, którego Debian i Ubuntu używają, gdy PHP działa jako mod_php. Sprawdź przez apachectl -V | grep -i mpm. Jeśli widzisz prefork, najpierw przejdź na PHP-FPM i MPM event (zamień 8.3 na swoją wersję PHP):
sudo apt install php8.3-fpm
sudo a2dismod php8.3 mpm_prefork
sudo a2enmod mpm_event proxy_fcgi setenvif http2
sudo a2enconf php8.3-fpm
sudo apachectl configtest && sudo systemctl restart apache2
Zmiana MPM wymaga pełnego restart, nie reload. Na Rocky, Alma i CentOS PHP-FPM z event jest już domyślny.
LiteSpeed serwuje HTTP/2 (i HTTP/3) przez HTTPS bez żadnych ustawień. Hosting z LiteSpeed, który odpowiada tylko przez HTTP/1.1, wyłączył go na poziomie serwera; zapytaj wsparcie.
cPanel
Hosting współdzielony: HTTP/2 to ustawienie całego serwera, które może zmienić tylko hosting. Poproś wsparcie o jego włączenie; większość hostingów już go ma.
Własny serwer z WHM:
- Otwórz WHM → EasyApache 4 i kliknij Customize przy bieżącym profilu.
- W Apache MPM wybierz
mod_mpm_event(albomod_mpm_worker). HTTP/2 nie działa zprefork. - W Apache Modules włącz
mod_http2. - Przejdź do Review i kliknij Provision.
Jeśli serwer nadal uruchamia PHP jako moduł Apache (DSO), odejście od prefork wymaga przeniesienia PHP na PHP-FPM, co robisz w MultiPHP Manager.
Plesk
W Plesku odwiedzającym odpowiada nginx, a w obecnych wersjach HTTP/2 jest domyślnie włączony. Jeśli sprawdzenie pokazuje HTTP/1.1, włącz go z wiersza poleceń serwera:
plesk bin http2_pref --enable
HTTP/2 wymaga nginx: jeśli został wyłączony (strona działa tylko na Apache), włącz go ponownie przez plesk sbin nginxmng --enable albo zapytaj hosting. Na współdzielonym hostingu z Pleskiem poproś hosting o uruchomienie polecenia powyżej.
Cloudflare
Gdy strona działa za Cloudflare (pomarańczowa chmurka), Cloudflare obsługuje odwiedzających przez HTTP/2 na każdym planie, niezależnie od tego, co obsługuje serwer źródłowy. HTTP/3 można włączyć w ustawieniach domeny Network (HTTP/3 (with QUIC)).
Jeśli sprawdzenie nadal pokazuje HTTP/1.1, rekord jest prawdopodobnie DNS only (szara chmurka), więc odwiedzający łączą się bezpośrednio z Twoim serwerem. Włącz proxy albo popraw serwer według jego zakładki.
Node.js i Next.js
Node.js ma moduł http2, ale na produkcji aplikacja Node lub Next.js zwykle stoi za nginx, load balancerem albo platformą taką jak Vercel, i to tam decyduje się o HTTP/2. Vercel i Netlify domyślnie serwują HTTP/2 i HTTP/3. Za własnym nginx postępuj według zakładki nginx; połączenie od nginx do aplikacji może zostać przy HTTP/1.1.
IIS i ASP.NET
IIS 10 (Windows Server 2016 i nowsze) automatycznie używa HTTP/2 dla każdego powiązania HTTPS. IIS 8.5 i starsze (Windows Server 2012 R2) tego nie potrafią; jedyną drogą jest nowszy Windows Server albo proxy, takie jak Cloudflare, przed nim.
Na Windows Server 2019 i nowszych powiązanie HTTPS ma pole wyboru Disable HTTP/2 (Site → Bindings → Edit). Upewnij się, że nie jest zaznaczone.
Platformy hostowane
Shopify, Wix, Squarespace i Webflow serwują każdą stronę przez HTTP/2 lub HTTP/3. Jeśli lista kontrolna pokazuje HTTP/1.1 dla strony na jednej z nich, domena prawdopodobnie nie wskazuje bezpośrednio na platformę, na przykład przez stary proxy; sprawdź jej rekordy DNS.
Potwierdź poprawkę
Uruchom ponownie polecenie curl z sekcji Sprawdź sam, następnie otwórz cel w PulseKeeper i kliknij Sprawdź teraz na zakładce Lista kontrolna. Pozycja zmieni się na OK w ciągu kilku minut, a nie dopiero przy następnym codziennym sprawdzeniu.