HttpClient自动解压缩gzip,但不支持deflate

4

使用 httpbinPostman Echo(它们似乎是同一个服务),我可以成功地获取其测试终端的gzip响应,如下所示:

var cli = new HttpClient(new HttpClientHandler
{
    AutomaticDecompression = DecompressionMethods.GZip
});
await cli.GetAsync("https://postman-echo.com/gzip");

但是如果我在他们的压缩测试端点上执行相同的操作:

var cli = new HttpClient(new HttpClientHandler
{
    AutomaticDecompression = DecompressionMethods.Deflate
});
await cli.GetAsync("https://postman-echo.com/deflate");

我从System.Net.Http.HttpContent.LoadIntoBufferAsync中得到以下异常/内部异常:

----> System.Net.Http.HttpRequestException : Error while copying content to a stream.
----> System.IO.IOException : The read operation failed, see inner exception.
----> System.Net.Http.WinHttpException : Operation aborted

我可以在.NET Core和.NET Framework中复现。请注意,这两者在浏览器中都可以正常工作:

https://postman-echo.com/gzip

https://postman-echo.com/deflate

这很容易让人想到这是测试服务的一个错误,但由于浏览器可以很好地处理它,其他平台上的库也能够(他们的测试套件非常全面,但他们不是.NET开发者),我真的不确定应该指向哪个方向。这个异常告诉我的确切信息是什么?

尝试手动向请求添加“Content-Encoding”头,以验证哪一方引起了问题。 - iSR5
谢谢。我想你是指请求中的 Accept-encoding,对吗?我确实尝试过了,但没有任何区别,可能应该提一下。 - Todd Menier
是的,我指的是 Accept-Encoding - iSR5
如果您已经尝试过了,请尝试另一个在.NET上测试的测试存储库。 - iSR5
我很乐意尝试其他的测试服务,但我不知道有哪些。 - Todd Menier
1个回答

1

不确定是否仍然相关,但这确实是 .net 中的一个 bug,直到最近才在 .net 6 中得到 修复


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接