二进制文件应当以字节形式到达 HTTP 客户端。用文本读取器读取,再把得到的字符串重新编码为 ASCII,可能在代理收到任何内容之前就替换掉其中的值。小段文本示例能正常工作,并不意味着这条路径对图片、压缩包或文档也是安全的。

在已有的 .NET 上传路径中,把该转换替换为二进制正文来源:

using var file = File.OpenRead(path);
using var content = new StreamContent(file);

让内容经由应用已配置的 HTTP 上传流程传递;这段代码负责建立正文来源,而现有的客户端仍然负责方法、目标地址、代理和生命周期管理。

删除任何依据旧字符串字符数计算出的 Content-Length。该字段以八位字节计量。应让 HTTP 库根据正文表示构造分帧,而不是把字符数与按不同方式编码的缓冲区配对。

对于有意的文本上传,应显式选择编码,并从实际发送的字节推导所需长度。这一文本格式决策不应套用到任意文件上。

将传输后的文件与可信的期望值进行比较。HTTP 成功只能确认上传操作在该层完成,无法证明此前的文本转换保留了原始字节。

相关文章