خط درخواستی که HTTP در Node را از طریق پروکسی مسیریابی میکند
یک درخواست سادهٔ پروکسی HTTP با کلاینت هستهٔ Node بسازید و نقطهٔ پایانی اتصال، مقصد مطلق و سرآیند Host را از هم جدا کنید.
در یک درخواست HTTP معمولی از طریق پروکسی پیشرو، Node به پروکسی متصل میشود و نشانی مقصد را در خط درخواست میفرستد. سه مقدار آن یک درخواست را توصیف میکنند:
| مقدار | مثال |
|---|---|
| نقطهٔ پایانی اتصال 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 برگزینید و پاسخش را بررسی کنید. نمونه پس از چاپ وضعیت، پاسخ را تخلیه میکند؛ برنامه میتواند بهجای آن بدنه را مصرف کند. پرسوجو بخشی از مقصد درخواست میماند.
چرا نشانی کامل به آنجا تعلق دارد
سرور مبدأ معمولاً مقصدی مانند /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 را به مقصد درون تونل پذیرفتهشده آغاز میکند. تغییر نشانی نمونه به HTTPS آن مراحل را نمیافزاید.
برای HTTPS یا بار کاری ترکیبی، از عامل یا فرستندهٔ پروکسی نگهداریشده با پشتیبانی تونل لازم استفاده کنید. برای نسخههای سازگار Node، یک گزینه fetch در Undici با ProxyAgent است. این نمونهٔ کوچک کلاینت هسته را برای مواردی نگه دارید که خودِ تبادل سادهٔ HTTP چیزی است که باید کنترل یا درک کنید.