IIS提供一个压缩(gzip的)响应Chrome浏览器邮递员,但不是.NET的HttpClient(

2019-10-22 04:07发布

我创建了使用Web API 2.2在Windows Server 2008 R2机器上运行IIS 7.5上一个REST Web服务。 说我遇到的问题是,Web服务返回一个压缩的响应(内容编码:gzip)当我提出通过谷歌Chrome邮差应用程序的请求。 但是,当我让使用.NET 4.5.1 HttpClient的相同的请求,服务器不返回压缩响应(在Content-Encoding头为空)。 这里是我的C#代码:

var handler = new HttpClientHandler();
handler.UseProxy = false;
handler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
handler.Credentials = CredentialCache.DefaultNetworkCredentials;

var client = new HttpClient(handler);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.AcceptCharset.Add(new StringWithQualityHeaderValue("utf-8"));
client.DefaultRequestHeaders.AcceptLanguage.Add(new StringWithQualityHeaderValue("en-US"));
client.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue { NoCache = true };
client.DefaultRequestHeaders.Connection.Add("keep-alive");

var response = await client.GetAsync("https://localhost/mywebsite");

注:我使用的是SSL连接。 我可以确认Web API Web服务正在接收Accept-Encoding: gzip同时从邮差应用程序请求和HttpClient的请求头。 事实上,请求头正是上是相同的,不同之处在于Connection: keep-alive头似乎是从HttpClient的要求剥离。 有没有人有任何想法,为什么Web服务将不会投放到HttpClient的一个压缩的响应?

Answer 1:

所以,我监测使用招瞧服务器响应的HTTP通信被实际上使用的HttpClient(数量由邮差接收到的字节是与由接收到的HttpClient的字节数),并送了对应的压缩时Content-Encoding: gzip头! 我想这HttpClient的是试图通过移除智能Content-Encoding: gzip头,当它处于自动减压模式。 这是记录任何地方?



文章来源: IIS serves a compressed (gzip) response to Chrome Postman but not to .NET HttpClient