Zachowaj binarne odpowiedzi obrazów w proxy Node.js
Przesyłaj binarne treści przez proxy forwardujące Node i zarezerwuj dekodowanie tekstu do świadomych transformacji tekstu.
const { pipeline } = require('node:stream');
pipeline(upstreamResponse, clientResponse, (error) => {
if (error) console.error('Proxy response failed:', error);
});
Użyj tej ścieżki treści po wyborze celu, żądaniu do źródła oraz przygotowaniu statusu i nagłówków do klienta. Strumienie Node zwykle dostarczają Buffery; nie gromadź ich w łańcuchu dla obrazów ani innej niezmienionej treści binarnej.
pipeline koordynuje przeciwciśnienie i propaguje błędy. Przy błędzie może zniszczyć miejsce docelowe, więc nie zakładaj, że da się potem wysłać kolejną odpowiedź błędu HTTP. Ten fragment nie jest pełnym serwerem proxy.
Dla przechodzących bajtów zachowaj istotne metadane reprezentacji, takie jak typ nośnika i kodowanie treści, a pola specyficzne dla przeskoku obsłuż regułami przekazywania. Porównanie bajtów gzip i pasujących nagłówków odpowiedzi pokazuje wybór między reprezentacją zakodowaną i zdekodowaną.
Świadome przepisywanie HTML wymaga innej ścieżki: rozpoznaj typ nośnika, obsłuż kompresję i zestaw znaków, przekształć tekst i wygeneruj metadane dla nowych bajtów. Stary Content-Length nie może opisać zmienionej treści.
Buffer.concat może zachować treść binarną, gdy potrzebne jest pełne buforowanie, ale przechowuje całą treść w pamięci. Przechodzący strumień obrazu nie potrzebuje tego kosztu.