Preserve os bytes de arquivos binários ao enviar por um proxy
Preserve os bytes e os comprimentos em bytes do arquivo ao enviar por um proxy, em vez de decodificar o artefato como texto e reconstruí-lo com ASCII.
Um arquivo binário deve chegar ao cliente HTTP como bytes. Lê-lo com um leitor de texto e recodificar a string resultante como ASCII pode substituir valores antes que o proxy receba qualquer coisa. Um pequeno exemplo de texto funcionar não torna esse caminho seguro para uma imagem, um arquivo compactado ou um documento.
Em um caminho de upload .NET existente, substitua essa conversão por uma origem de corpo binária:
using var file = File.OpenRead(path);
using var content = new StreamContent(file);
Passe o conteúdo pelo upload HTTP configurado na aplicação; o trecho estabelece a origem do corpo, enquanto o cliente existente ainda controla o método, o destino, o proxy e o gerenciamento do tempo de vida.
Remova qualquer Content-Length calculado a partir da contagem de caracteres da string antiga. Esse campo mede octetos. Deixe a biblioteca HTTP construir o enquadramento a partir da representação do corpo em vez de emparelhar uma contagem de caracteres com um buffer codificado de outra forma.
Para um upload de texto intencional, escolha a codificação explicitamente e derive o comprimento necessário dos bytes enviados. Essa decisão de formato de texto não deve ser aplicada a arquivos arbitrários.
Compare o artefato transferido com um valor esperado confiável. O sucesso HTTP confirma que uma operação de upload foi concluída nessa camada; ele não pode mostrar que uma conversão de texto anterior preservou os bytes originais.