HTTP2 HTTP3 Unterschiede
HTTP/2 und HTTP/3: Das schnellere Web
HTTP/2 und HTTP/3 bringen massive Performance-Verbesserungen. Lernen Sie die Unterschiede und wie Sie davon profitieren.
Protokoll-Vergleich
| Feature | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|
| Transport | TCP | TCP | QUIC (UDP) |
| Multiplexing | ❌ | ✅ | ✅ |
| Header-Kompression | ❌ | HPACK | QPACK |
| Server Push | ❌ | ✅ | ✅ |
| Head-of-Line Blocking | ✅ | TCP-Level | ❌ |
| 0-RTT | ❌ | ❌ | ✅ |
HTTP/1.1 Probleme
HTTP/1.1: Sequentielle Anfragen ┌──────────────────────────────────────┐ │ Browser Server │ │ │ │ │ │ │── Request 1 ──>│ │ │ │<── Response 1──│ │ │ │── Request 2 ──>│ │ │ │<── Response 2──│ │ │ │── Request 3 ──>│ │ │ │<── Response 3──│ │ └──────────────────────────────────────┘ → Langsam! Eine Anfrage nach der anderen → Workaround: Mehrere TCP-Verbindungen (6 pro Domain)
HTTP/2 Multiplexing
HTTP/2: Parallele Streams über eine Verbindung ┌──────────────────────────────────────┐ │ Browser Server │ │ │ │ │ │ │══ Request 1 ══>│ │ │ │══ Request 2 ══>│ │ │ │══ Request 3 ══>│ │ │ │<══ Response 2══│ │ │ │<══ Response 1══│ │ │ │<══ Response 3══│ │ └──────────────────────────────────────┘ → Schnell! Alle Anfragen gleichzeitig → Eine TCP-Verbindung reicht
HTTP/3 und QUIC
HTTP/3: Kein Head-of-Line Blocking ┌──────────────────────────────────────┐ │ QUIC (über UDP) │ │ ┌─────────────────────────────────┐ │ │ │ Stream 1 ════════════════════ │ │ │ │ Stream 2 ════════════════════ │ │ │ │ Stream 3 ════════════════════ │ │ │ └─────────────────────────────────┘ │ │ Packet-Verlust in Stream 2 │ │ blockiert NUR Stream 2 │ └──────────────────────────────────────┘ HTTP/2 über TCP: - Packet-Verlust blockiert ALLE Streams - TCP muss auf Retransmission warten
Nginx HTTP/2 aktivieren
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
# Empfohlene SSL-Einstellungen
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
}
Nginx HTTP/3 aktivieren
# Nginx 1.25+ erforderlich
server {
listen 443 ssl;
listen 443 quic reuseport;
listen [::]:443 ssl;
listen [::]:443 quic reuseport;
server_name example.com;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
# HTTP/3 Header für Browser
add_header Alt-Svc 'h3=":443"; ma=86400';
# QUIC-spezifisch
ssl_protocols TLSv1.3;
}
Apache HTTP/2
# Module aktivieren
sudo a2enmod http2
# VirtualHost konfigurieren
<VirtualHost *:443>
Protocols h2 h2c http/1.1
ServerName example.com
SSLEngine on
SSLCertificateFile /etc/ssl/cert.pem
SSLCertificateKeyFile /etc/ssl/key.pem
</VirtualHost>
Server Push (HTTP/2)
# Nginx
location = /index.html {
http2_push /css/style.css;
http2_push /js/app.js;
}
# Oder via Link-Header
add_header Link "; rel=preload; as=style";
# Apache
<Location /index.html>
Header add Link "; rel=preload; as=style"
</Location>
⚠️ Hinweis:
Server Push wird von Chrome seit 2022 nicht mehr unterstützt. Verwenden Sie stattdessen 103 Early Hints.
103 Early Hints
# Nginx
location = /index.html {
add_header Link "; rel=preload; as=style" early;
add_header Link "; rel=preload; as=script" early;
}
Prüfen ob HTTP/2 aktiv
# Mit curl curl -I --http2 https://example.com # Zeigt "HTTP/2 200" wenn aktiv # Browser DevTools # Network Tab → Protocol-Spalte zeigt "h2" oder "h3" # Online-Test # https://tools.keycdn.com/http2-test
Best Practices
HTTP/2+ Optimierungen:
- Keine Domain-Sharding mehr nötig (eine Domain reicht)
- Kein Sprite-Bundling mehr nötig (viele kleine Dateien OK)
- CSS/JS-Bundling trotzdem sinnvoll (weniger Requests)
- Preload für kritische Ressourcen
- HTTPS ist Pflicht für HTTP/2