Wiersz żądania, który kieruje HTTP w Node przez proxy
Zbuduj zwykłe żądanie HTTP przez proxy za pomocą klienta podstawowego Node, rozdzielając punkt końcowy połączenia, cel absolutny i nagłówek Host.
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 TCP | proxy.example:8080 |
| Cel żądania | http://example.com/news?q=proxy |
| Nagłówek Host | example.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ć.