При обикновена 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 обмен е това, което трябва да контролирате или разберете.

Подобни статии