Bei einer gewöhnlichen HTTP-Anfrage über einen Forward-Proxy verbindet sich Node mit dem Proxy und sendet die Ziel-URL in der Anforderungszeile. Drei Werte beschreiben diese eine Anfrage:

WertBeispiel
TCP-Verbindungsendpunktproxy.example:8080
Anforderungszielhttp://example.com/news?q=proxy
Host-Headerexample.com

Dieses Beispiel für Node 22 macht die Trennung deutlich:

const http = require('node:http');
const destination = new URL('http://example.com/news?q=proxy');

const request = http.get({
  hostname: 'proxy.example',
  port: 8080,
  path: destination.href,
  headers: { Host: destination.host },
  signal: AbortSignal.timeout(15000),
}, (response) => {
  console.log(response.statusCode);
  response.on('error', console.error);
  response.resume();
});
request.on('error', console.error);

Der Endpunkt ist ein Platzhalter; wählen Sie einen Kandidaten aus der HTTP-Proxy-Liste für einen öffentlichen HTTP-Test und prüfen Sie seine Antwort. Das Beispiel leert die Antwort nach dem Ausgeben des Status; eine Anwendung kann stattdessen den Body verbrauchen. Die Abfrage bleibt Teil des Anforderungsziels.

Warum die vollständige URL dorthin gehört

Ein Ursprungsserver erhält normalerweise ein Ziel wie /news?q=proxy. Ein Forward-Proxy benötigt zusätzlich das Ziel, deshalb definiert HTTP/1.1 das Ziel in absoluter Form:

GET http://example.com/news?q=proxy HTTP/1.1
Host: example.com

Nach den Regeln von HTTP/1.1 verwendet ein Proxy, der die absolute Form erhält, beim Weiterleiten die Autorität der URI und ersetzt ein inkonsistentes empfangenes Host-Feld. Das Senden eines konsistenten Ziel-Host-Headers hält die ausgehende Anfrage dennoch eindeutig. Der Verbindungs-Hostname von Node ist der Vermittler, setzen Sie den Header daher bewusst, statt sich auf diese Verbindungsadresse zu verlassen.

Wenn eine Authentifizierung erforderlich ist, gehören die Zugangsdaten des Proxys zu seinem Hop. Die Anforderungsoption auth von Node erzeugt einen Authorization-Header für die Ressource; sie ist keine allgemeine Proxy-Anmeldeoption. Verwenden Sie das vom Proxy verlangte Schema und einen geeigneten Proxy-Client, wenn der Austausch aufwendiger ist.

HTTPS fügt einen Tunnel hinzu

Dieses Beispiel behandelt die einfache HTTP-Weiterleitung. Eine typische HTTPS-Verbindung über einen HTTP-Proxy fordert zuerst CONNECT example.com:443 an und startet dann TLS zum Ziel innerhalb des akzeptierten Tunnels. Das Ändern der Beispiel-URL auf HTTPS fügt diese Schritte nicht hinzu.

Für HTTPS oder eine gemischte Last verwenden Sie einen gepflegten Proxy-Agenten oder Dispatcher mit der erforderlichen Tunnelunterstützung. Für kompatible Node-Versionen ist eine Option Undicis fetch mit einem ProxyAgent. Behalten Sie dieses kleine Kern-Client-Beispiel für Fälle, in denen der einfache HTTP-Austausch selbst das ist, was Sie steuern oder verstehen müssen.

Ähnliche Artikel