Zachovajte binárne odpovede obrázkov v proxy Node.js
Preposielajte binárne telá cez doprednú proxy v Node a dekódovanie textu si nechajte len na zámerné textové transformácie.
const { pipeline } = require('node:stream');
pipeline(upstreamResponse, clientResponse, (error) => {
if (error) console.error('Proxy response failed:', error);
});
Túto cestu tela použite po výbere cieľa, požiadavke na zdroj a príprave stavu a hlavičiek pre klienta. Prúdy Node zvyčajne dodávajú Buffery; nezhromažďujte ich do reťazca pri obrázkoch ani inom nezmenenom binárnom obsahu.
pipeline koordinuje protitlak a šíri zlyhania. Pri chybe môže zničiť cieľ, preto nepredpokladajte, že potom možno odoslať ďalšiu chybovú odpoveď HTTP. Tento úryvok nie je úplný proxy server.
Pri prechádzajúcich bajtoch zachovajte príslušné metadáta reprezentácie, ako je typ média a kódovanie obsahu, a polia špecifické pre jednotlivé skoky spracujte pravidlami preposielania. Porovnanie bajtov gzip a zodpovedajúcich hlavičiek odpovede ukazuje voľbu medzi kódovanou a dekódovanou reprezentáciou.
Zámerné prepisovanie HTML potrebuje inú cestu: rozpoznajte typ média, ošetrite kompresiu a znakovú sadu, transformujte text a vygenerujte metadáta pre nové bajty. Starý Content-Length nemôže opísať zmenené telo.
Buffer.concat môže zachovať binárny obsah, keď je potrebné úplné načítanie do pamäte, ale uchováva celé telo v pamäti. Prechádzajúci prúd obrázka túto cenu nepotrebuje.