Кај обично HTTP барање преку напредно прокси, Node се поврзува со проксито и ја испраќа URL-адресата на одредиштето во линијата на барање. Три вредности го опишуваат тоа едно барање:

ВредностПример
Крајна точка на TCP врскатаproxy.example:8080
Цел на барањетоhttp://example.com/news?q=proxy
Заглавие Hostexample.com

Овој пример за Node 22 го прави одвојувањето очигледно:

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

Крајната точка е заменлив елемент; изберете кандидат од списокот со HTTP проксија за јавно HTTP тестирање и проверете го неговиот одговор. Примерот го исцрпува одговорот откако ќе го отпечати статусот; апликацијата може наместо тоа да го троши телото. Барањето останува дел од целта на барањето.

Зошто целата URL припаѓа таму

Изворниот сервер обично прима цел како /news?q=proxy. Напредното прокси исто така го бара одредиштето, затоа HTTP/1.1 ја дефинира целта во апсолутна форма:

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

Според правилата на HTTP/1.1, прокси што прима апсолутна форма при препраќање ја користи власта на URI-то и заменува неконзистентно примено поле Host. Испраќањето конзистентно заглавие Host за одредиштето сепак го остава излезното барање недвосмислено. Името на домаќинот на врската во Node е посредникот, затоа поставете го заглавието намерно наместо да се потпирате на таа адреса на врската.

Ако е потребна автентикација, акредитивите на проксито припаѓаат на неговиот скок. Опцијата за барање auth на Node создава заглавие Authorization за ресурсот; тоа не е општа опција за најавување на прокси. Користете ја шемата што ја бара проксито и соодветен прокси клиент кога размената е посложена.

HTTPS додава тунел

Овој пример покрива обично препраќање на HTTP. Типична HTTPS врска преку HTTP прокси прво бара CONNECT example.com:443, потоа започнува TLS кон одредиштето внатре во прифатениот тунел. Менувањето на URL-адресата од примерот во HTTPS не ги додава тие фази.

За HTTPS или мешано оптоварување, користете одржуван прокси агент или испраќач со потребната поддршка за тунели. За компатибилни верзии на Node, една можност е fetch на Undici со ProxyAgent. Задржете го овој мал пример со основниот клиент за случаи кога самата обична HTTP размена е она што треба да го контролирате или разберете.

Поврзани статии