سطر الطلب الذي يوجّه 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 العادية نفسها ما تحتاج إلى التحكم فيه أو فهمه.