我有一个 ServiceStack 服务,它具有处理 GET 请求的方法。此方法返回二进制数据。
public object Get(DownloadFile request) {
return new HttpResult(new FileInfo("some file"), "application/octet-stream", asAttachment: true);
}
当主机是 Windows 时它工作正常,但是当我在 Linux 中使用 Mono+FastCGI 运行它时,我下载的数据不一样。
我分析了几个文件的返回字节,并得出结论认为存在模式。数据以这种方式包装:
original data size + \r\n + original data + \r\n\r\n0\r\n\r\n
为什么会发生这种情况以及如何解决?
编辑:
事实证明,这是由于 HTTP 1.1 中的分块传输造成的。
Knocte 的回答为我指明了正确的方向,我能够通过强制我的请求使用 HTTP 1.0 来解决这个问题:
var req = (HttpWebRequest)WebRequest.Create(url);
req.ProtocolVersion = new Version("1.0");
我不需要尝试 knocte 建议的补丁,但它看起来是解决问题的正确方法,而不是像我那样避免它。