Захоўвайце бінарныя адказы выяў у проксі 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 можа захаваць бінарнае змесціва, калі патрэбна поўнае буфераванне, але захоўвае ўсё цела ў памяці. Паток выявы, што праходзіць, не мае патрэбы ў гэтых выдаткаў.