Зберігайте двійкові відповіді зображень у проксі Node.js
Передавайте двійкові тіла через прямий проксі Node і залишайте декодування тексту лише для навмисних текстових перетворень.
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 може зберегти двійковий вміст, коли потрібне повне буферизування, але зберігає все тіло в памʼяті. Потік зображення, що проходить, не потребує цих витрат.