Редът на заявката, който насочва HTTP в Node през прокси
Изградете обикновена HTTP прокси заявка с основния клиент на Node, като разделите крайната точка на връзката, абсолютната цел и заглавката Host.
При обикновена HTTP заявка през предно прокси Node се свързва с проксито и изпраща URL адреса на местоназначението в реда на заявката. Три стойности описват тази една заявка:
| Стойност | Пример |
|---|---|
| Крайна точка на TCP връзката | proxy.example:8080 |
| Цел на заявката | http://example.com/news?q=proxy |
| Заглавка Host | example.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 обмен е това, което трябва да контролирате или разберете.