Запазване на бинарни отговори с изображения в прокси 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 може да запази бинарно съдържание, когато е нужно пълно буфериране, но съхранява цялото тяло в паметта. Преминаващ поток от изображения не се нуждае от тази цена.