# HTTP-protokoll

> A teszt azt nézi, hogy a nyitóoldal HTTP/2 vagy HTTP/3 protokollon érkezik-e; ha csak HTTP/1.1, a szerveren kell bekapcsolni a HTTP/2-t.

A HTTP/1.1-en a böngésző egy kapcsolaton egyszerre egy kérést bonyolít le, ezért egy sok fájlból álló oldalnál a kérések sorban állnak. A HTTP/2 (RFC 9113) egyetlen kapcsolaton, párhuzamosan viszi a kéréseket és a válaszokat (multiplexelés), így a CSS, a JavaScript és a képek egyszerre tölthetők. A HTTP/3 (RFC 9114) ugyanezt QUIC-on, UDP felett teszi. A legtöbb tárhelyen és CDN-ben ez egy beállítás.

## Hogyan mérjük

A riport a nyitóoldal kérésénél nézi, melyik protokollt egyeztette a szerver:

- Ha az `Alt-Svc` válaszfejléc `h3` értéket hirdet, a protokoll HTTP/3. Blokkolt (WAF-fal védett) oldalnál ez a jel nem számít, mert a blokkoló válasz nem azon a szerveren jött, amelyik a HTTP/3-at hirdeti.
- Ha a címed `http://`-vel kezdődik, HTTP/1.1.
- Egyébként a TLS-kézfogáskor (ALPN) egyeztetett protokoll dönt: `h2` esetén HTTP/2, minden más esetben HTTP/1.1.
- Ha https címnél a TLS-próba nem sikerült, a protokoll ismeretlen, és a teszt nem értékelhető.

**Megfelelő:** HTTP/2 vagy HTTP/3. **Hiba:** HTTP/1.1.

Az eredmény csak a nyitóoldal kapcsolatát írja le, a CDN-ről vagy más domainről betöltött fájlokét nem.

## Hogyan javítsd

A teszt a TLS-kézfogás eredményét nézi, ezért előbb a [HTTPS-átirányítás](https://hub.hellowp.io/hu/report/biztonsag/https-atiranyitas/) és a [TLS-tanúsítvány](https://hub.hellowp.io/hu/report/biztonsag/tls-tanusitvany/) legyen rendben. Az nginx dokumentációja szerint a HTTP/2 TLS felett az ALPN TLS-kiterjesztést igényli, amelyet az OpenSSL 1.0.2 óta támogat.

### nginx

A `server` blokkba, a `listen 443 ssl;` sor mellé:

```nginx title="nginx"
http2 on;
```

A `http2` direktíva az nginx 1.25.1-ben jelent meg. Régebbi változaton a `listen` sor végére írd: `listen 443 ssl http2;`. Az nginx dokumentációja szerint a `listen` paramétere elavult, a direktíva váltja ki.

### Apache (.htaccess)

Az Apache-ban a HTTP/2-t a `mod_http2` modul adja; a `Protocols` direktíva (Apache 2.4.17-től) a dokumentáció szerint a szerver-konfigurációban vagy a virtuális hostban használható, ezért nem a `.htaccess`-be, hanem a virtuális host fájljába kerül:

```apache title="Apache virtual host"
Protocols h2 http/1.1
```

A modulnak be kell lennie töltve. LiteSpeed Enterprise ezt az Apache-konfigurációból olvassa, OpenLiteSpeed nem: ott a WebAdmin felületen kapcsold be, vagy kérd a tárhelytől.

### Cloudflare

A Cloudflare dokumentációja szerint a HTTP/2 minden csomagban alapból be van kapcsolva (a Cloudflare szélén van tanúsítvány). Ha a mérés mégis HTTP/1.1-et mutat, valószínűleg nem a Cloudflare-en keresztül éred el az oldalt.

### WordPress

A WordPress maga nem választ protokollt, ezt a webszerver vagy a CDN adja. Ha tárhelyszolgáltatónál vagy, a HTTP/2 vagy HTTP/3 bekapcsolását nála kell kérni vagy a felületén állítani.

## Hogyan ellenőrizd

Futtasd újra a riportot, vagy parancssorból:

```bash title="Terminál"
curl -sI --http2 https://pelda.hu/ -o /dev/null -w "%{http_version}\n"
```

A kimenet `2` vagy `3`, ha működik. A böngésző fejlesztői eszközeinek Hálózat (Network) paneljén a „Protocol” oszlop is megmutatja (`h2`, `h3`).
