Preserve respostas binárias de imagem num proxy Node.js
Transmita corpos binários através de um proxy direto Node e reserve a descodificação de texto para transformações de texto deliberadas.
const { pipeline } = require('node:stream');
pipeline(upstreamResponse, clientResponse, (error) => {
if (error) console.error('Proxy response failed:', error);
});
Use este caminho de corpo depois da seleção do alvo, do pedido à origem e da preparação do estado e dos cabeçalhos para o cliente. Os fluxos Node fornecem normalmente Buffers; não os acumule numa string para imagens ou outro conteúdo binário inalterado.
pipeline coordena a contrapressão e propaga as falhas. Pode destruir o destino em caso de erro, por isso não assuma que outra resposta de erro HTTP possa ser enviada depois. Este fragmento não é um servidor proxy completo.
Para os bytes que passam, preserve os metadados de representação relevantes, como o tipo de media e a codificação do conteúdo, e trate os campos específicos de cada salto através das regras de encaminhamento. Uma comparação entre bytes gzip e cabeçalhos de resposta correspondentes mostra a escolha entre representação codificada e descodificada.
A reescrita deliberada de HTML exige outro caminho: reconhecer o tipo de media, tratar a compressão e o conjunto de caracteres, transformar o texto e gerar metadados para os novos bytes. O antigo Content-Length não pode descrever um corpo alterado.
Buffer.concat pode preservar conteúdo binário quando é necessário armazenamento completo, mas guarda todo o corpo em memória. Um fluxo de imagem que passa não precisa desse custo.