{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreihot6rmnsmxlxhmw2ojb6a5pnfu5a7swdywrfnvivdjfx5grnjjry",
    "uri": "at://did:plc:nkxz2ojdvmieg2nhphvputvp/app.bsky.feed.post/3mmdxpkoqhy42"
  },
  "coverImage": {
    "$type": "blob",
    "ref": {
      "$link": "bafkreiglyc7nrejcvmmk2alxdfv7brk2qpbtqg6rxwzxf64d2lh43missy"
    },
    "mimeType": "image/png",
    "size": 1081501
  },
  "description": "Drei Jahre HTTP/3 und QUIC im Nginx-Betrieb, ohne ein einziges Problem. Was QUIC beim Verbindungsaufbau spart, wie Alt-Svc und HTTPS-DNS-Record helfen und warum die Post-Quantum-TLS-Konfiguration automatisch auch fuer HTTP/3 greift.",
  "path": "/2022/01/13/jetzt-mit-http-3-quic/",
  "publishedAt": "2026-05-21T08:08:21.000Z",
  "site": "https://www.kernel-error.de",
  "tags": [
    "FreeBSD",
    "HTTP3",
    "InfoSec",
    "nginx",
    "PostQuantum",
    "QUIC",
    "SelfHosted",
    "TLS",
    "RFC 9000",
    "SPDY",
    "http3check.net",
    "nginx.org",
    "0-RTT",
    "Head-of-Line-Blocking",
    "HTTPS-DNS-Record (SVCB)",
    "X25519MLKEM768 als Key-Exchange-Gruppe konfiguriert",
    "HTTPS RR und SVCB Records"
  ],
  "textContent": "Von QUIC habt ihr sicher alle schon gehört, seit knapp Mitte 2021 ist dieser neue Standard fertig und in einem recht einfach zu merkendem RFC 9000 beschrieben.\n\nIm Grunde geht es darum, HTTP-Verbindungen schneller zu machen und dabei sogar UDP zum Einsatz zu bringen. Nicht ganz korrekt ist es einfach eine Weiterentwicklung von SPDY.\n\nUm zu testen, ob eine Webseite bereits HTTP/3 also QUIC unterstützt, kann ich euch http3check.net ans Herz legen. Diese gibt, wenn gewünscht, sogar noch ein paar Detailinformationen aus.\n\nWer sehen möchte, ob sein Browser QUIC „macht“, kann auch nginx.org nutzen. Steht oben „Congratulations! You’re connected over QUIC.“ Dann ist man ein Gewinner.\n\nDie Konfiguration am Nginx ist wie immer sehr einfach und ein sehr gutes Beispiel findet sich direkt von nginx.\n\nMein Nginx spricht dieses nun ebenfalls, mal sehen ob es Probleme gibt.\n\n* * *\n\n### Update März 2026: Drei Jahre HTTP/3 im Betrieb\n\nEs sind jetzt gut drei Jahre vergangen und ich kann sagen: Es gab keine Probleme. Kein einziges. HTTP/3 läuft hier seit 2022 auf allen vHosts und ich habe nie einen Fehler gesehen, der auf QUIC zurückzuführen war. Auch in den Logfiles nichts Auffälliges.\n\nWas sich geändert hat: Damals war HTTP/3 in Nginx noch experimentell und brauchte einen separaten Build mit dem quiche-Patch oder BoringSSL. Seit **Nginx 1.25.0** (Mai 2023) ist HTTP/3 offiziell im Mainline-Branch enthalten und wird mit dem normalen `--with-http_v3_module` Build-Flag aktiviert. Kein Patch mehr, kein BoringSSL mehr, einfach OpenSSL 3.x und fertig. Mein aktueller Stack: **Nginx 1.29.4** mit **OpenSSL 3.5.4** auf **FreeBSD 15**.\n\n### Was bringt HTTP/3 in der Praxis?\n\nDer größte Vorteil von QUIC gegenüber TCP ist die Verbindungsaufbauzeit. Bei TCP+TLS braucht ihr mindestens zwei Roundtrips, bevor Daten fließen (TCP Handshake + TLS Handshake). QUIC macht das in einem einzigen Roundtrip. Bei einem Wiederverbindungsversuch sogar in null Roundtrips (0-RTT).\n\nAuf einer Glasfaserleitung mit 5 ms Latenz merkt ihr das kaum. Aber auf einem Smartphone im Zug mit 80 ms Latenz und gelegentlichem Paketverlust macht das einen spürbaren Unterschied. Dazu kommt, dass QUIC auf UDP basiert und damit das Head-of-Line-Blocking Problem von TCP löst: Ein verlorenes Paket blockiert nicht mehr alle Streams, sondern nur den einen betroffenen.\n\n### Konfiguration 2026\n\nDie Konfiguration hat sich seit 2022 etwas verändert. Hier mein aktuelles Setup für den Blog-vHost:\n\n\n    server {\n        listen [::]:443 ssl;\n        listen [::]:443 quic;\n\n        http2 on;\n\n        server_name  www.kernel-error.de;\n\n        # TLS (wird per include eingebunden)\n        include tls-default.conf;\n        ssl_certificate      /path/to/fullchain.pem;\n        ssl_certificate_key  /path/to/privkey.pem;\n\n        # ...\n    }\n\nWichtig sind zwei Dinge. Erstens: Der `quic` Listener läuft auf demselben Port 443 wie der SSL-Listener, nur eben über UDP statt TCP. Zweitens: Die Clients müssen wissen, dass HTTP/3 verfügbar ist. Das passiert über den `Alt-Svc` Header:\n\n\n    add_header Alt-Svc 'h3=\":443\"; ma=86400' always;\n\nDieser Header sagt dem Browser: „Ich spreche auch h3 auf Port 443, merk dir das für 24 Stunden.“ Beim nächsten Besuch nutzt der Browser dann direkt QUIC. Ohne diesen Header bleibt alles bei HTTP/2 über TCP.\n\nOptional könnt ihr auch einen HTTPS-DNS-Record (SVCB) setzen, damit der Browser schon beim DNS-Lookup weiß, dass HTTP/3 verfügbar ist:\n\n\n    $ dig +short HTTPS www.kernel-error.de\n    1 . alpn=\"h3,h2\" ipv4hint=148.251.30.200 ipv6hint=2a01:4f8:262:4716::443\n\nMit `alpn=\"h3,h2\"` im HTTPS-Record kann der Browser die QUIC-Verbindung schon beim allerersten Besuch aufbauen, ohne erst auf den Alt-Svc Header warten zu müssen.\n\n### Firewall nicht vergessen\n\nEin Klassiker, der mich 2022 kurz stolpern ließ: QUIC braucht **UDP Port 443**. Wenn eure Firewall nur TCP 443 durchlässt, sehen die Clients den Alt-Svc Header, versuchen QUIC und laufen ins Timeout. Auf FreeBSD mit pf:\n\n\n    pass in quick on $ext_if proto udp to $jail_nginx port 443\n\n### Post-Quantum-Kryptografie inklusive\n\nQUIC verwendet intern TLS 1.3 für die Verschlüsselung. Das heißt: Wenn ihr in eurer Nginx-TLS-Konfiguration X25519MLKEM768 als Key-Exchange-Gruppe konfiguriert habt, gilt das automatisch auch für QUIC-Verbindungen. Kein extra Aufwand. Euer HTTP/3 Traffic ist dann ebenfalls mit hybridem Post-Quantum-Schlüsselaustausch abgesichert.\n\n### Browser-Support\n\n2022 war HTTP/3 noch ein Feature für Early Adopter. 2026 ist es Standard. Chrome, Firefox, Safari und Edge unterstützen QUIC seit Jahren. Laut den Logfiles dieses Blogs nutzen inzwischen gut 40% der Besucher HTTP/3. Tendenz steigend, weil immer mehr Mobilgeräte von dem schnelleren Verbindungsaufbau profitieren.\n\nWer es noch nicht aktiviert hat: Der Aufwand ist minimal, die Vorteile real und das Risiko gleich null. Drei Jahre Betrieb ohne ein einziges Problem sprechen für sich.\n\n**Siehe auch:** HTTPS RR und SVCB Records — per DNS-Record signalisieren, dass HTTP/3 verfügbar ist. Damit können Clients direkt mit QUIC starten, ohne vorher TCP zu probieren.",
  "title": "Jetzt mit HTTP/3 und QUIC: Schnelleres Surfen leicht gemacht"
}