Red zahtjeva koji usmjerava Node HTTP kroz proxy
Izgradite običan HTTP proxy zahtjev Nodeovim osnovnim klijentom razdvajajući krajnju točku veze, apsolutni cilj i zaglavlje Host.
Za običan HTTP zahtjev kroz prednji proxy Node se povezuje s proxyjem i šalje URL odredišta u redu zahtjeva. Tri vrijednosti opisuju taj jedan zahtjev:
| Vrijednost | Primjer |
|---|---|
| Krajnja točka TCP veze | proxy.example:8080 |
| Cilj zahtjeva | http://example.com/news?q=proxy |
| Zaglavlje Host | example.com |
Ovaj primjer za Node 22 čini razdvajanje očitim:
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);
Krajnja točka je rezervirano mjesto; odaberite kandidata s popisa HTTP proxyja za javni HTTP test i provjerite njegov odgovor. Primjer ispušta odgovor nakon ispisa statusa; aplikacija može umjesto toga trošiti tijelo. Upit ostaje dio cilja zahtjeva.
Zašto puni URL pripada tamo
Izvorni poslužitelj obično prima cilj poput /news?q=proxy. Prednji proxy također treba odredište, pa HTTP/1.1 definira cilj u apsolutnom obliku:
GET http://example.com/news?q=proxy HTTP/1.1
Host: example.com
Prema pravilima HTTP/1.1, proxy koji primi apsolutni oblik koristi autoritet URI-ja pri prosljeđivanju i zamjenjuje nedosljedno primljeno polje Host. Slanje dosljednog zaglavlja Host odredišta i dalje čini odlazni zahtjev nedvosmislenim. Naziv hosta veze u Nodeu je posrednik, pa zaglavlje postavite namjerno umjesto da se oslanjate na tu adresu veze.
Ako je potrebna autentifikacija, vjerodajnice proxyja pripadaju njegovom skoku. Nodeova opcija zahtjeva auth stvara zaglavlje Authorization za resurs; to nije opća opcija prijave na proxy. Koristite shemu koju proxy zahtijeva i prikladnog proxy klijenta kada je razmjena složenija.
HTTPS dodaje tunel
Ovaj primjer pokriva obično prosljeđivanje HTTP-a. Tipična HTTPS veza kroz HTTP proxy prvo zatraži CONNECT example.com:443, a zatim pokrene TLS prema odredištu unutar prihvaćenog tunela. Promjena URL-a primjera na HTTPS ne dodaje te faze.
Za HTTPS ili mješoviti posao koristite održavanog proxy agenta ili dispečera s potrebnom podrškom za tunele. Za kompatibilne verzije Nodea jedna je opcija Undicijev fetch s ProxyAgentom. Zadržite ovaj mali primjer osnovnog klijenta za slučajeve kada je sama obična HTTP razmjena ono što trebate kontrolirati ili razumjeti.