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

Подобни статии