Vrstica zahteve, ki usmerja HTTP v Node skozi proxy
Zgradite običajno zahtevo HTTP prek proxyja z osnovnim odjemalcem Node, tako da ločite končno točko povezave, absolutni cilj in glavo Host.
Pri običajni zahtevi HTTP prek posredovalnega proxyja se Node poveže s proxyjem in pošlje URL cilja v vrstici zahteve. Tri vrednosti opisujejo to eno zahtevo:
| Vrednost | Primer |
|---|---|
| Končna točka povezave TCP | proxy.example:8080 |
| Cilj zahteve | http://example.com/news?q=proxy |
| Glava Host | example.com |
Ta primer za Node 22 ločevanje naredi očitno:
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);
Končna točka je nadomestni znak; izberite kandidata s seznama proxyjev HTTP za javni preskus HTTP in preverite njegov odgovor. Primer po izpisu stanja odgovor izprazni; aplikacija lahko namesto tega porabi telo. Poizvedba ostane del cilja zahteve.
Zakaj celoten URL sodi tja
Izvorni strežnik običajno prejme cilj, kot je /news?q=proxy. Posredovalni proxy potrebuje tudi cilj, zato HTTP/1.1 določa cilj v absolutni obliki:
GET http://example.com/news?q=proxy HTTP/1.1
Host: example.com
Po pravilih HTTP/1.1 proxy, ki prejme absolutno obliko, pri posredovanju uporabi pooblastilo URI in zamenja nedosledno prejeto polje Host. Pošiljanje dosledne glave Host cilja kljub temu ohrani odhodno zahtevo nedvoumno. Ime gostitelja povezave v Node je posrednik, zato glavo nastavite namerno, namesto da bi se zanašali na ta naslov povezave.
Če je potrebna overitev, poverilnice proxyja pripadajo njegovemu skoku. Možnost zahteve auth v Node ustvari glavo Authorization za vir; to ni splošna možnost prijave v proxy. Uporabite shemo, ki jo zahteva proxy, in ustrezen odjemalec proxy, ko je izmenjava bolj zapletena.
HTTPS doda tunel
Ta primer pokriva običajno posredovanje HTTP. Tipična povezava HTTPS prek proxyja HTTP najprej zahteva CONNECT example.com:443 in nato zažene TLS do cilja znotraj sprejetega tunela. Sprememba URL-ja primera v HTTPS teh stopenj ne doda.
Za HTTPS ali mešano obremenitev uporabite vzdrževanega zastopnika ali razpošiljatelja proxyja s potrebno podporo za tunele. Za združljive različice Node je ena možnost fetch Undici s ProxyAgent. Ta majhen primer osnovnega odjemalca ohranite za primere, ko je prav običajna izmenjava HTTP tisto, kar morate nadzorovati ali razumeti.