OXID und QUIC

Heute würde ich gerne ein etwas unkonventionelles Projekt hier vorstellen. Und zwar wird mein Shop jetzt über QUIC ausgeliefert.

OXID, ausgeliefert über QUIC

QUIC ist ein neues Protokoll, das von Google entwickelt wird (und für die Google-Dienste bereits eingesetzt wird). Es basiert auf UDP und ersetzt TCP, Teile von HTTP/2 und TLS. QUIC-Verbindungen sind immer perfect-forward-secure verschlüsselt.

Ich habe im letzten halben Jahr zusammen mit einem Freund eine QUIC-Implementierung in Go geschrieben (github.com/lucas-clemente/quic-go). Unsere Bibliothek wird bereits für den (experimentellen) QUIC-Support vom Caddy Webserver verwendet.

Ab sofort nutze ich diese auch produktiv in meinem Shop: shop.oxid-responsive.com (Details zu meinem Setup siehe unten).

QUIC wird bisher ausschließlich von Google Chrome unterstützt. Für alle anderen Browsern gibt es ein automatisches Fallback auf HTTP/2 über TCP. Welches Protokoll verwendet wird, seht ihr in den Chrome Dev-Tools im Network-Tab (Spalte Protocol einblenden).

Einige Vorteile von QUIC
[ul]
[li] Unterstützung von 0-RTT Connections: Es entfällt der TCP und der TLS-Handshake. Bereits das erste Request enthält Daten.[/li][li] Schneller auf schlechten Verbindungen: Da QUIC auf UDP basiert, gibt es kein TCP-HOL (Head of Line Blocking) mehr. Außerdem verwendet QUIC verbesserte Congestion-Algorithmen, um Packet Loss zu vermeiden.[/li][li] Das Protokoll wird laufend verbessert. Basierend auf Performance-Messungen releast Google alle paar Wochen eine neue Version.[/li][/ul]

Für Details über das Protokoll verweise ich auf diese Präsentation.

Dies zahlt sich aus: Laut Googles Messungen kommt es auf Youtube zu 30% weniger Rebufferings, und die Google-Suche lädt 1s schneller auf den 1% schlechtesten Verbindungen. Referenz dieses Vergleichs ist die herkömmliche HTTP/2-Verbindung über TCP.

Alle diese Verbesserungen kommen zusätzlich zu den teils erheblichen Perfomanz-Vorteilen von HTTP/2, welches ja leider bei vielen Hostern und Webservern immer noch nicht Standard ist.

Setup für OXID
Ich verwende den Caddy Webserver als Reverse Proxy, der QUIC-Verbindungen von außen annimmt und die SSL-Verschlüsselung terminiert. Dieser verbindet sich lokal per HTTP auf den Apache, der dann die Seite generiert und den Caddy über QUIC an den Client senden lässt.
Durch dieses Setup musste ich nicht viel an meiner Apache-Konfiguration ändern (nur die Subdomains an localhost binden), und die Konfiguration von Caddy ist auch sehr einfach. Auch IonCube und Zend Loader, welche ja für viele Module benötigt werden, laufen einfach im Apache weiter.

Gegenüber meinem vorherigen Setup, in dem der Apache direkt die Seiten ausgeliefert hat, bietet dies sogar einen doppelten Speedup: Da Apache bisher nur HTTP 1.1 spricht, bekommen Besucher meiner Seite jetzt die Vorteile von QUIC und HTTP/2 zu spüren.

Ein weiterer Vorteil ist ein cooles Feature von Caddy. Dieser kümmert sich automatisch um die Verwaltung der SSL-Zertifikate: Wenn ich eine neue (Sub-) Domain hinzufüge, holt er sich ein Zertifikat von LetsEncrypt, und verlängert dieses automatisch, bevor es abläuft.

Einige Nachteile von QUIC

Kunden können im Shop nicht bestellen. Ich kann bei dir im Shop keine Artikel in den Warenkorb legen und zur Kasse gehen. Warenkorb ist immer leer.

shop.oxid-responsive.com

[B]Browser[/B]: Chromium
[B]Version[/B]: 53.02

Grüße
Rafig

Ich kann zwar Produkte in den Warenkorb tun, aber bei mir werden keine Bilder geladen.
Chrome mobile v54

Ich habe vorhin auch mal geschafft ein Produkt in den Warenkorb zu tun aber bei dem zweiten Artikel kam wieder “Warenkorb ist leer”. Übrigens bei mir werden Bilder auch nicht geladen.

Grüße
Rafig

Hi Jungs,

vielen Dank für eure Hilfe!

Der Live-Test hat sich gelohnt, und mich auf 3 neue Bugs gestoßen: #337, #338 und #342.

Ich habe QUIC jetzt wieder aktiviert und hoffe auf viele neue Bugs :slight_smile: