Zachovejte binární odpovědi obrázků v proxy Node.js
Přeposílejte binární těla přes dopřednou proxy v Node a dekódování textu si nechte jen pro záměrné textové transformace.
const { pipeline } = require('node:stream');
pipeline(upstreamResponse, clientResponse, (error) => {
if (error) console.error('Proxy response failed:', error);
});
Tuto cestu těla použijte po volbě cíle, požadavku na zdroj a přípravě stavu a hlaviček pro klienta. Proudy Node obvykle dodávají Buffery; nehromažďujte je do řetězce u obrázků ani jiného nezměněného binárního obsahu.
pipeline koordinuje protitlak a šíří selhání. Při chybě může zničit cíl, takže nepředpokládejte, že poté lze odeslat další chybovou odpověď HTTP. Tento úryvek není úplný proxy server.
U procházejících bajtů zachovejte příslušná metadata reprezentace, jako je typ média a kódování obsahu, a pole specifická pro jednotlivé skoky zpracujte pravidly předávání. Srovnání bajtů gzip a odpovídajících hlaviček odpovědi ukazuje volbu mezi kódovanou a dekódovanou reprezentací.
Záměrné přepisování HTML potřebuje jinou cestu: rozpoznejte typ média, ošetřete kompresi a znakovou sadu, transformujte text a vygenerujte metadata pro nové bajty. Starý Content-Length nemůže popsat změněné tělo.
Buffer.concat může zachovat binární obsah, když je nutné plné načtení do paměti, ale uchovává celé tělo v paměti. Procházející proud obrázku tuto cenu nepotřebuje.