HTTPQUERY
Deutsch

CONNECT

Verwendung

Eine CONNECT-Anfrage weist einen HTTP-Proxy an, eine TCP-Verbindung zum angegebenen Host und Port aufzubauen und anschließend Rohbytes in beide Richtungen weiterzuleiten. Das Anfrageziel verwendet die Authority-Form (host:port) statt eines Pfades.

Der Hauptanwendungsfall von CONNECT ist HTTPS-Tunneling. Wenn ein Client hinter einem Proxy eine HTTPS-Site erreichen muss, läuft der Ablauf folgendermaßen ab:

Da der Proxy nach dem Aufbau des Tunnels Rohbytes weiterleitet, hat er keinen Einblick in den verschlüsselten Datenverkehr. Dies ist der Mechanismus, mit dem Unternehmens- und Netzwerk-Proxys den HTTPS-Zugriff auf externe Server ermöglichen.

Verlangt der Proxy eine Authentifizierung, fügt der Client der CONNECT-Anfrage einen Proxy-Authorization-Header hinzu. Fehlende oder ungültige Anmeldedaten führen zu einer Antwort mit 407 Proxy Authentication Required.

Der WHATWG Fetch Standard führt CONNECT als verbotene Methode und verhindert damit, dass JavaScript CONNECT-Anfragen über Browser-APIs absetzt.

In HTTP/2 und HTTP/3 erzeugt CONNECT einen Tunnel über einen einzelnen Stream statt über die gesamte TCP-Verbindung. Die HTTP/2-Spezifikation definiert das grundlegende CONNECT für einzelne Streams. Das erweiterte CONNECT-Protokoll-Upgrade ergänzt ein :protocol-Pseudo-Header, das WebSockets und andere Protokolle über eine multiplexte Verbindung ermöglicht, mit Unterstützung sowohl in HTTP/2 als auch in HTTP/3. Der Basis-Stream-Tunnel und das erweiterte CONNECT ergänzen einander: Ersterer bietet reines Tunneling, Letzteres ermöglicht Nicht-TCP-Protokolle über multiplexte Verbindungen.

HTTPS-Tunnel über einen Proxy

Ein Client fordert über einen Proxy einen TLS-Tunnel zu example.com auf Port 443 an. Der Proxy authentifiziert den Client anhand des Proxy-Authorization-Headers, öffnet die TCP-Verbindung und bestätigt mit 200 OK.

Anfrage

CONNECT example.com:443 HTTP/1.1
Host: example.com:443
Proxy-Authorization: Basic dXNlcjpwYXNz

Antwort

HTTP/1.1 200 Connection Established

Nach Erhalt der 200-Antwort beginnt der Client den TLS-Handshake mit example.com durch den offenen Tunnel. Der Proxy leitet alle nachfolgenden Daten weiter, ohne den Inhalt zu prüfen oder zu verändern.

Tunnel ohne Authentifizierung

Wenn der Proxy keine Anmeldedaten verlangt, enthält die Anfrage nur den Zielhost und den Zielport.

Anfrage

CONNECT example.com:443 HTTP/1.1
Host: example.com:443

Antwort

HTTP/1.1 200 Connection Established

CORS

CONNECT ist eine in CORS verbotene Methode. Browser blockieren sämtliche Versuche, CONNECT über Browser-APIs wie fetch() und XMLHttpRequest zu senden.

HTTP-Tunneling

HTTP-Tunneling kapselt Nicht-HTTP-Verkehr in HTTP-Nachrichten und erlaubt damit Protokollen wie HTTPS, SSH und FTP, HTTP-Proxys zu durchqueren. CONNECT ist der wichtigste Mechanismus zum Aufbau solcher Tunnel. Der Proxy öffnet eine rohe TCP-Verbindung zum Zielhost und Zielport und leitet die Bytes anschließend bidirektional weiter, ohne den Inhalt zu prüfen.

Ohne einen Proxy zwischen Client und Server ist CONNECT überflüssig. Clients verbinden sich dann direkt über das Zielprotokoll mit den Servern.

Sicherheit

Offene Proxys, die CONNECT zu beliebigen Ports annehmen, ermöglichen Missbrauch: Spam-Weiterleitung über SMTP (Port 25), Portscans interner Netzwerke und das Umgehen von Netzwerkzugriffskontrollen. Produktiv eingesetzte Proxys beschränken CONNECT auf Port 443 (HTTPS) oder auf eine Positivliste freigegebener Ziele.

Die OWASP stuft uneingeschränktes CONNECT als Sicherheitsrisiko ein. Der WHATWG Fetch Standard klassifiziert CONNECT als verbotene Methode und verhindert damit, dass Browser CONNECT-Anfragen direkt über fetch() oder XMLHttpRequest senden.