Parastā HTTP pieprasījumā caur pārsūtošo starpniekserveri Node savienojas ar starpniekserveri un nosūta galamērķa URL pieprasījuma rindā. Trīs vērtības apraksta šo vienu pieprasījumu:

VērtībaPiemērs
TCP savienojuma galapunktsproxy.example:8080
Pieprasījuma mērķishttp://example.com/news?q=proxy
Host galveneexample.com

Šis Node 22 piemērs padara atdalīšanu skaidru:

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

Galapunkts ir vietturis; publiskam HTTP testam izvēlieties kandidātu no HTTP starpniekserveru saraksta un pārbaudiet tā atbildi. Piemērs iztukšo atbildi pēc statusa izdrukāšanas; lietojumprogramma tā vietā var patērēt pamattekstu. Vaicājums paliek pieprasījuma mērķa daļa.

Kāpēc pilns URL pieder tur

Izcelsmes serveris parasti saņem mērķi, piemēram, /news?q=proxy. Pārsūtošajam starpniekserverim arī vajag galamērķi, tāpēc HTTP/1.1 definē mērķi absolūtā formā:

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

Saskaņā ar HTTP/1.1 noteikumiem starpniekserveris, kas saņem absolūto formu, pārsūtot izmanto URI pilnvaras un aizstāj nekonsekventu saņemto Host lauku. Konsekventas galamērķa Host galvenes nosūtīšana joprojām padara izejošo pieprasījumu viennozīmīgu. Node savienojuma resursdatora nosaukums ir starpnieks, tāpēc iestatiet galveni apzināti, nevis paļaujoties uz šo savienojuma adresi.

Ja nepieciešama autentifikācija, starpniekservera akreditācijas dati pieder tā lēcienam. Node pieprasījuma opcija auth izveido Authorization galveni resursam; tā nav vispārēja starpniekservera pieteikšanās opcija. Kad apmaiņa ir sarežģītāka, izmantojiet starpniekservera prasīto shēmu un piemērotu starpniekservera klientu.

HTTPS pievieno tuneli

Šis piemērs aptver vienkāršu HTTP pārsūtīšanu. Tipisks HTTPS savienojums caur HTTP starpniekserveri vispirms pieprasa CONNECT example.com:443, pēc tam akceptētajā tunelī sāk TLS uz galamērķi. Piemēra URL maiņa uz HTTPS šos posmus nepievieno.

HTTPS vai jauktai slodzei izmantojiet uzturētu starpniekservera aģentu vai sūtītāju ar nepieciešamo tuneļa atbalstu. Saderīgām Node versijām viena iespēja ir Undici fetch ar ProxyAgent. Saglabājiet šo mazo pamata klienta piemēru gadījumiem, kad pati vienkāršā HTTP apmaiņa ir tas, kas jums jākontrolē vai jāsaprot.

Saistītie raksti