Рядок запиту, який спрямовує 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 потрібно контролювати або розуміти.