Užklausos eilutė, kuri nukreipia Node HTTP per tarpinį serverį
Sukurkite įprastą HTTP tarpinio serverio užklausą su pagrindiniu Node klientu, atskirdami ryšio galinį tašką, absoliutų tikslą ir Host antraštę.
Į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škas | proxy.example:8080 |
| Užklausos tikslas | http://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.