Riadok požiadavky, ktorý smeruje HTTP v Node cez proxy
Zostavte obyčajnú HTTP proxy požiadavku pomocou základného klienta Node tak, že oddelíte koncový bod pripojenia, absolútny cieľ a hlavičku Host.
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:
| Hodnota | Príklad |
|---|---|
| Koncový bod TCP pripojenia | proxy.example:8080 |
| Cieľ požiadavky | http://example.com/news?q=proxy |
| Hlavička Host | example.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ť.