W zwykłym żądaniu HTTP przez proxy przekazujące Node łączy się z proxy i wysyła adres URL celu w wierszu żądania. Trzy wartości opisują to jedno żądanie:

WartośćPrzykład
Punkt końcowy połączenia TCPproxy.example:8080
Cel żądaniahttp://example.com/news?q=proxy
Nagłówek Hostexample.com

Ten przykład dla Node 22 czyni rozdzielenie jawnym:

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);

Punkt końcowy to placeholder; wybierz kandydata z listy proxy HTTP do publicznego testu HTTP i sprawdź jego odpowiedź. Przykład opróżnia odpowiedź po wypisaniu statusu; aplikacja może zamiast tego zużyć treść. Zapytanie pozostaje częścią celu żądania.

Dlaczego pełny URL należy właśnie tam

Serwer źródłowy zwykle otrzymuje cel taki jak /news?q=proxy. Proxy przekazujące potrzebuje także celu, dlatego HTTP/1.1 definiuje cel w formie absolutnej:

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

Zgodnie z zasadami HTTP/1.1 proxy otrzymujące formę absolutną używa uprawnienia URI podczas przekazywania i zastępuje niespójne otrzymane pole Host. Wysyłanie spójnego nagłówka Host celu nadal czyni wychodzące żądanie jednoznacznym. Nazwa hosta połączenia w Node jest pośrednikiem, więc ustaw nagłówek świadomie, zamiast polegać na tym adresie połączenia.

Jeśli wymagane jest uwierzytelnianie, poświadczenia proxy należą do jego skoku. Opcja żądania auth w Node tworzy nagłówek Authorization dla zasobu; nie jest to ogólna opcja logowania do proxy. Użyj schematu wymaganego przez proxy i odpowiedniego klienta proxy, gdy wymiana jest bardziej złożona.

HTTPS dodaje tunel

Ten przykład obejmuje zwykłe przekazywanie HTTP. Typowe połączenie HTTPS przez proxy HTTP najpierw żąda CONNECT example.com:443, a następnie rozpoczyna TLS do celu wewnątrz zaakceptowanego tunelu. Zmiana adresu URL przykładu na HTTPS nie dodaje tych etapów.

W przypadku HTTPS lub obciążenia mieszanego użyj utrzymywanego agenta lub dyspozytora proxy z wymaganym wsparciem tuneli. Dla zgodnych wersji Node jedną z opcji jest fetch Undici z ProxyAgent. Zachowaj ten mały przykład klienta podstawowego na przypadki, w których to właśnie zwykła wymiana HTTP jest tym, czym trzeba zarządzać lub co trzeba zrozumieć.

Powiązane artykuły