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 толық буферлеу қажет болғанда бинарлық мазмұнды сақтай алады, бірақ бүкіл денені жадыда ұстайды. Өтіп бара жатқан сурет ағынына бұл шығын қажет емес.

Қатысты мақалалар