Зберігайте байти бінарного файлу під час вивантаження через проксі
Зберігайте байти файлу та довжини в байтах під час вивантаження через проксі, замість того щоб декодувати файл як текст і перебудовувати його в ASCII.
Бінарний файл має надходити до HTTP-клієнта як байти. Читання його текстовим читачем і повторне кодування отриманого рядка в ASCII може замінити значення ще до того, як проксі щось отримає. Працездатність невеликого текстового зразка не робить цей шлях безпечним для зображення, архіву чи документа.
У наявному шляху вивантаження .NET замініть це перетворення бінарним джерелом тіла:
using var file = File.OpenRead(path);
using var content = new StreamContent(file);
Передайте вміст через налаштоване в застосунку HTTP-вивантаження; фрагмент установлює джерело тіла, тоді як наявний клієнт і далі відповідає за метод, призначення, проксі та керування часом життя.
Видаліть будь-який Content-Length, обчислений із кількості символів старого рядка. Це поле вимірює октети. Дозвольте HTTP-бібліотеці побудувати кадрування з подання тіла замість того, щоб поєднувати кількість символів із буфером в іншому кодуванні.
Для навмисного текстового вивантаження виберіть кодування явно й виведіть потрібну довжину з надісланих байтів. Це рішення про текстовий формат не слід застосовувати до довільних файлів.
Порівняйте переданий файл із довіреним очікуваним значенням. Успіх HTTP підтверджує, що операція вивантаження завершилася на цьому рівні; він не може показати, що попереднє текстове перетворення зберегло початкові байти.