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 पूर्ण बफ़रिंग आवश्यक होने पर बाइनरी सामग्री सुरक्षित रख सकता है, पर पूरी बॉडी स्मृति में रखता है। गुज़रती छवि स्ट्रीम को उस लागत की आवश्यकता नहीं है।