Линија захтева која усмерава Node HTTP кроз прокси
Направите обичан 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-а једна је могућност Undici fetch са ProxyAgent-ом. Задржите овај мали пример основног клијента за случајеве када је сама обична HTTP размена оно што треба да контролишете или разумете.