احتفظ باستجابات الصور الثنائية في وكيل Node.js
مرّر الأجسام الثنائية عبر وكيل أمامي في Node واحتفظ بفك ترميز النص للتحويلات النصية المقصودة فقط.
const { pipeline } = require('node:stream');
pipeline(upstreamResponse, clientResponse, (error) => {
if (error) console.error('Proxy response failed:', error);
});
استخدم مسار الجسم هذا بعد اختيار الهدف وطلب المنبع وتجهيز الحالة والترويسات في المصب. تقدّم تدفقات Node عادةً كائنات Buffer؛ لا تجمعها في سلسلة نصية للصور أو لأي محتوى ثنائي لا يتغيّر.
ينسّق pipeline الضغط الخلفي وينشر الإخفاقات. قد يدمّر الوجهة عند حدوث خطأ، لذا لا تفترض إمكانية إرسال استجابة HTTP أخرى للخطأ بعد ذلك. هذا المقطع ليس خادم وكيل كاملًا.
بالنسبة إلى البايتات المارّة، حافظ على البيانات الوصفية ذات الصلة للتمثيل مثل نوع الوسائط وترميز المحتوى، وعالج الحقول الخاصة بكل قفزة عبر قواعد التمرير. تُظهر مقارنة بين بايتات gzip وترويسات الاستجابة المطابقة اختيار التمثيل بين المُرمَّز والمُفكَّك.
تتطلب إعادة كتابة HTML المقصودة مسارًا آخر: التعرّف على نوع الوسائط، ومعالجة الضغط ومجموعة المحارف، وتحويل النص، وتوليد البيانات الوصفية للبايتات الجديدة. لا يمكن لـ Content-Length القديم أن يصف جسمًا تغيّر.
يمكن لـ Buffer.concat حفظ المحتوى الثنائي عندما يلزم تخزين كامل، لكنه يخزّن الجسم بأكمله في الذاكرة. لا يحتاج تدفق صورة مارّ إلى هذه التكلفة.