Pri obyčajnej HTTP požiadavke cez dopredu smerujúcu proxy sa Node pripojí k proxy a odošle URL cieľa v riadku požiadavky. Tri hodnoty opisujú túto jednu požiadavku:

HodnotaPríklad
Koncový bod TCP pripojeniaproxy.example:8080
Cieľ požiadavkyhttp://example.com/news?q=proxy
Hlavička Hostexample.com

Tento príklad pre Node 22 robí oddelenie zrejmým:

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

Koncový bod je zástupný; vyberte kandidáta zo zoznamu HTTP proxy na verejný HTTP test a skontrolujte jeho odpoveď. Príklad po vypísaní stavu odpoveď vyčerpá; aplikácia môže namiesto toho spotrebovať telo. Dopyt zostáva súčasťou cieľa požiadavky.

Prečo tam patrí celá URL

Zdrojový server zvyčajne dostáva cieľ ako /news?q=proxy. Dopredu smerujúca proxy potrebuje aj cieľ, preto HTTP/1.1 definuje cieľ v absolútnom tvare:

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

Podľa pravidiel HTTP/1.1 proxy, ktorá prijme absolútny tvar, pri preposielaní použije autoritu URI a nahradí nekonzistentné prijaté pole Host. Odoslanie konzistentnej hlavičky Host cieľa napriek tomu udržiava odchádzajúcu požiadavku jednoznačnú. Hostname pripojenia v Node je sprostredkovateľ, preto hlavičku nastavte zámerne namiesto spoliehania sa na tú adresu pripojenia.

Ak sa vyžaduje overenie, prihlasovacie údaje proxy patria jeho skoku. Voľba požiadavky auth v Node vytvára hlavičku Authorization pre zdroj; nie je to všeobecná voľba prihlásenia k proxy. Keď je výmena zložitejšia, použite schému vyžadovanú proxy a vhodného proxy klienta.

HTTPS pridáva tunel

Tento príklad pokrýva obyčajné preposielanie HTTP. Typické HTTPS pripojenie cez HTTP proxy najprv požiada o CONNECT example.com:443 a potom spustí TLS k cieľu vo vnútri prijatého tunela. Zmena URL príkladu na HTTPS tieto fázy nepridá.

Pre HTTPS alebo zmiešanú záťaž použite udržiavaného proxy agenta alebo dispečera s požadovanou podporou tunelov. Pre kompatibilné verzie Node je jednou z možností fetch z Undici s ProxyAgent. Tento malý príklad základného klienta si ponechajte pre prípady, keď práve obyčajná HTTP výmena je to, čo potrebujete ovládať alebo pochopiť.

Súvisiace články