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

Падобныя артыкулы