Bináris képválaszok megőrzése Node.js proxyban
Bináris törzseket továbbít Node forward proxyn keresztül, és a szövegdekódolást csak szándékos szövegátalakításokra tartja fenn.
const { pipeline } = require('node:stream');
pipeline(upstreamResponse, clientResponse, (error) => {
if (error) console.error('Proxy response failed:', error);
});
Ezt a törzsútvonalat a cél kiválasztása, a felső irányú kérés, valamint az állapot és a fejlécek előkészítése után használja. A Node streamek általában Buffereket adnak; ne gyűjtse őket karakterláncba képek vagy más változatlan bináris tartalom esetén.
A pipeline összehangolja az ellennyomást és továbbítja a hibákat. Hiba esetén megsemmisítheti a célt, ezért ne feltételezze, hogy utána még küldhető egy másik HTTP-hibaválasz. Ez a részlet nem teljes proxykiszolgáló.
Az átmenő bájtoknál őrizze meg a releváns reprezentációs metaadatokat, például a médiatípust és a tartalomkódolást, a hop-specifikus mezőket pedig továbbítási szabályokkal kezelje. gzip bájtok és a hozzájuk tartozó válaszfejlécek összehasonlítása mutatja a kódolt és a dekódolt reprezentáció közötti választást.
A szándékos HTML-átírás más útvonalat igényel: ismerje fel a médiatípust, kezelje a tömörítést és a karakterkészletet, alakítsa át a szöveget, és állítson elő metaadatokat az új bájtokhoz. A régi Content-Length nem írhat le megváltozott törzset.
A Buffer.concat megőrizheti a bináris tartalmat, ha teljes pufferelés szükséges, de a teljes törzset a memóriában tárolja. Az átmenő képstreamnek nincs szüksége erre a költségre.