HTTP/2 ist der Nachfolger von HTTP/1.1 und bietet signifikante Performance-Verbesserungen. Die Aktivierung ist einfach und bringt sofortige Vorteile.
Was ist HTTP/2?
HTTP/2 wurde 2015 standardisiert und löst viele Probleme von HTTP/1.1:
Vergleich HTTP/1.1 vs. HTTP/2
| Eigenschaft | HTTP/1.1 | HTTP/2 | |-------------|----------|--------| | Verbindungen | Mehrere parallel | Eine multiplexed | | Header | Klartext, wiederholt | Komprimiert (HPACK) | | Laden | Sequentiell | Parallel | | Server Push | Nein | Ja | | Binär/Text | Text | Binär |
Hauptvorteile
Multiplexing:
HTTP/1.1:
Verbindung 1: ──[Datei A]──[Datei B]──[Datei C]──
Verbindung 2: ──[Datei D]──[Datei E]──
(Blockierung, wenn eine Datei langsam)
HTTP/2:
Verbindung: ═[A]═[B]═[D]═[C]═[E]═
(Alle Dateien parallel auf einer Verbindung)Header-Komprimierung:
- HTTP/1.1 sendet Header bei jeder Anfrage komplett
- HTTP/2 komprimiert und cacht Header (HPACK)
- Besonders effektiv bei vielen kleinen Anfragen
Server Push:
Browser: Anfrage für index.html
Server: Sendet index.html
+ pusht style.css (ohne Anfrage)
+ pusht script.js (ohne Anfrage)Voraussetzungen
HTTPS erforderlich
HTTP/2 funktioniert in allen Browsern nur mit HTTPS:
# SSL-Zertifikat prüfen
openssl s_client -connect example.com:443 -servername example.comFalls noch kein SSL: Let's Encrypt einrichten.
Server-Version prüfen
# Apache
apache2 -v
# Nginx
nginx -vMindestversionen:
- Apache 2.4.17+
- Nginx 1.9.5+
HTTP/2 mit Nginx aktivieren
Schritt 1: Nginx-Version prüfen
nginx -v
# nginx version: nginx/1.24.0
# Mit HTTP/2-Support kompiliert?
nginx -V 2>&1 | grep http_v2
# --with-http_v2_moduleSchritt 2: Konfiguration anpassen
# /etc/nginx/sites-available/example.com
server {
listen 443 ssl http2; # http2 hinzufügen
listen [::]:443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# SSL-Einstellungen
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
root /var/www/example.com;
index index.html;
}Schritt 3: Testen und neu laden
nginx -t
systemctl reload nginxHTTP/2 mit Apache aktivieren
Schritt 1: Module aktivieren
# HTTP/2 Modul aktivieren
a2enmod http2
# SSL muss aktiviert sein
a2enmod sslSchritt 2: Konfiguration anpassen
# /etc/apache2/sites-available/example.com-ssl.conf
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/example.com
# HTTP/2 aktivieren
Protocols h2 http/1.1
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>Schritt 3: PHP-FPM verwenden (wichtig!)
Apache HTTP/2 funktioniert nicht mit mod_php. Wechseln Sie zu PHP-FPM:
# mod_php deaktivieren
a2dismod php8.2
# PHP-FPM aktivieren
a2enmod proxy_fcgi setenvif
a2enconf php8.2-fpm
# Apache neu starten
systemctl restart apache2Schritt 4: Testen
apachectl configtest
systemctl reload apache2HTTP/2 prüfen
Browser-Entwicklertools
1. DevTools öffnen (F12) 2. Network-Tab 3. Spalte "Protocol" einblenden 4. Seite neu laden 5. "h2" sollte angezeigt werden
Kommandozeile
# Mit curl
curl -I --http2 -s https://example.com | grep HTTP
# HTTP/2 200
# Detailliert
curl -I --http2 -v https://example.com 2>&1 | grep -i "http/2"
# Verbindungsdetails
curl -w "HTTP Version: %{http_version}\n" -o /dev/null -s https://example.comOnline-Tools
- KeyCDN HTTP/2 Test: https://tools.keycdn.com/http2-test
- HTTP/2 Check von Cloudflare
HTTP/2 Server Push (Nginx)
Grundlegende Push-Konfiguration
location / {
root /var/www/html;
# CSS und JS vorausladen
http2_push /css/style.css;
http2_push /js/script.js;
}Dynamisches Push
location = /index.html {
http2_push /css/style.css;
http2_push /js/app.js;
http2_push /images/logo.png;
}Push deaktivieren
# Global deaktivieren
http2_push off;
# Oder per Location
location /api/ {
http2_push off;
}Push-Hinweis: Vorsicht!
Server Push kann kontraproduktiv sein wenn:
- Dateien bereits im Browser-Cache sind
- Zu viele Ressourcen gepusht werden
- Ressourcen nicht auf allen Seiten benötigt werden
Empfehlung: Testen Sie mit und ohne Push und messen Sie die Ladezeiten.
SSL/TLS-Optimierung für HTTP/2
Moderne Cipher-Konfiguration
# Nginx
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# Session-Caching
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;# Apache
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
SSLHonorCipherOrder off
SSLSessionCache "shmcb:logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300OCSP Stapling
# Nginx
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;HTTP/3 (QUIC) - Ausblick
HTTP/3 basiert auf QUIC (UDP statt TCP) und bietet weitere Verbesserungen:
# Nginx mit QUIC (ab 1.25.0)
server {
listen 443 quic;
listen 443 ssl;
ssl_certificate ...;
ssl_certificate_key ...;
# HTTP/3 ankündigen
add_header Alt-Svc 'h3=":443"; ma=86400';
}HTTP/3 ist noch nicht überall unterstützt, HTTP/2 ist der aktuelle Standard.
Performance-Vergleich
Vorher messen (HTTP/1.1)
# Ladezeit messen
curl -w "Time: %{time_total}s\n" -o /dev/null -s https://example.com
# Oder mit siege
siege -c 10 -t 30s https://example.comNach HTTP/2-Aktivierung erneut messen
Typische Verbesserungen:
- 10-50% schnellere Ladezeiten
- Besonders bei Seiten mit vielen Ressourcen
- Deutliche Verbesserung bei hoher Latenz
Troubleshooting
HTTP/2 funktioniert nicht
# Nginx-Module prüfen
nginx -V 2>&1 | grep http_v2
# Apache-Module prüfen
apache2ctl -M | grep http2
# SSL prüfen
curl -I https://example.com
# Muss HTTPS sein!Apache: "AH02261: worker already present"
PHP-FPM statt mod_php verwenden (siehe oben).
Performance-Probleme
# Nginx: Limits anpassen
http2_max_concurrent_streams 128;
http2_max_requests 1000;Browser zeigt immer noch HTTP/1.1
- Browser-Cache leeren
- HTTPS-Redirect prüfen
- Server-Konfiguration neu laden
Checkliste
□ HTTPS aktiv
□ Webserver-Version ausreichend
□ HTTP/2-Modul aktiviert
□ Konfiguration angepasst
□ Bei Apache: PHP-FPM statt mod_php
□ SSL-Konfiguration optimiert
□ Konfiguration getestet (nginx -t / apachectl configtest)
□ Server neu geladen
□ HTTP/2 in Browser DevTools verifiziertFazit
HTTP/2 bietet messbare Performance-Vorteile bei minimalem Aufwand. Die Aktivierung erfordert HTTPS und eine kleine Konfigurationsänderung. Für Apache ist der Wechsel zu PHP-FPM notwendig. Server Push sollte mit Bedacht eingesetzt werden. Nach der Aktivierung messen Sie die Verbesserungen mit realen Tests.