Įprastoje HTTP užklausoje per perdavimo tarpinį serverį Node prisijungia prie tarpinio serverio ir siunčia paskirties URL užklausos eilutėje. Trys reikšmės apibūdina tą vieną užklausą:

ReikšmėPavyzdys
TCP ryšio galinis taškasproxy.example:8080
Užklausos tikslashttp://example.com/news?q=proxy
Host antraštėexample.com

Šis Node 22 pavyzdys atskyrimą padaro aiškų:

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

Galinis taškas yra vietos rezervas; viešam HTTP testui pasirinkite kandidatą iš HTTP tarpinių serverių sąrašo ir patikrinkite jo atsakymą. Pavyzdys ištuština atsakymą po to, kai išspausdina būseną; programa gali vietoj to vartoti turinį. Užklausa lieka užklausos tikslo dalimi.

Kodėl pilnas URL priklauso ten

Originalus serveris paprastai gauna tikslą, pavyzdžiui, /news?q=proxy. Perdavimo tarpiniam serveriui taip pat reikia paskirties, todėl HTTP/1.1 apibrėžia tikslą absoliučia forma:

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

Pagal HTTP/1.1 taisykles tarpinis serveris, gavęs absoliučią formą, persiųsdamas naudoja URI įgaliojimą ir pakeičia nenuoseklų gautą Host lauką. Nuoseklios paskirties Host antraštės siuntimas vis tiek palieka siunčiamą užklausą vienareikšmę. Node ryšio pagrindinio kompiuterio vardas yra tarpininkas, todėl antraštę nustatykite sąmoningai, o ne pasikliaukite tuo ryšio adresu.

Jei reikia autentifikavimo, tarpinio serverio kredencialai priklauso jo šuoliui. Node užklausos parinktis auth sukuria Authorization antraštę ištekliui; tai nėra bendra tarpinio serverio prisijungimo parinktis. Kai mainai sudėtingesni, naudokite tarpinio serverio reikalaujamą schemą ir tinkamą tarpinio serverio klientą.

HTTPS prideda tunelį

Šis pavyzdys apima įprastą HTTP perdavimą. Įprastas HTTPS ryšys per HTTP tarpinį serverį pirmiausia prašo CONNECT example.com:443, tada priimtame tunelyje pradeda TLS į paskirties vietą. Pavyzdžio URL pakeitimas į HTTPS tų etapų neprideda.

HTTPS ar mišriam krūviui naudokite prižiūrimą tarpinio serverio agentą arba siuntėją su reikiamu tunelio palaikymu. Suderinamoms Node versijoms viena galimybė yra Undici fetch su ProxyAgent. Išsaugokite šį mažą pagrindinio kliento pavyzdį atvejams, kai pats įprastas HTTP mainai yra tai, ką turite valdyti ar suprasti.

Susiję straipsniai