我们有一个用 .net 编写的小型代理服务器。核心代理功能的简化版本:
builder.Run(async ctx =>
{
using (HttpClient client = new HttpClient())
{
await client.SendAsync(BuildRequest(), HttpCompletionOption.ResponseHeadersRead)
.ContinueWith(t => t.Result.Content.CopyToAsync(ctx.Response.Body));
}
});
这个想法是代理将简单地将任何下游响应流回调用客户端,尽可能原始。
代理和服务之间的连接似乎工作正常,总是返回我期望的 17kb 数据。问题出在客户端和代理之间,发送相同的请求会导致响应被截断,长度在 0 到 17kb 之间,显然是没有原因的。
- 将内容从服务响应复制到客户端响应时,我如何判断何时收到所有内容?我知道分块传输被 0 长度的块终止,所以我需要手动检查,还是由 httpresponse 实例本身处理?