3
我有一个ServiceStack服务,它具有处理GET请求的方法。该方法返回二进制数据。在Mono + FastCGI中托管ServiceStack时,二进制数据损坏
public object Get(DownloadFile request) {
return new HttpResult(new FileInfo("some file"), "application/octet-stream", asAttachment: true);
}
在宿主是Windows中,它工作正常,但当我与单声道+ FastCGI的运行它在Linux中我下载的数据是不一样的。
我分析了几个文件的返回字节,并得出结论是有一个模式。数据正在以这种方式包装:
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建议的补丁,但它看起来是解决问题的正确方法,而不是像我一样避免它。