Зачувајте бинарни одговори со слики во 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 може да зачува бинарна содржина кога е потребно целосно баферирање, но го чува целото тело во меморијата. Течен тек на слика што минува не ја бара таа цена.