0

我正在使用客户端发出http请求HttpWebRequest

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestString);
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
request.Method = "GET"; 
request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
public void GetResponseCallback(IAsyncResult asynchronousResult)
{
    HttpWebResponse response = null;
    HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;

    response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);

    Console.WriteLine(response.Headers["Content-Encoding"]);
            
    if (response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.Moved)
    {   
        Stream inputStream = response.GetResponseStream();
        StreamReader stream = new StreamReader(inputStream);
        string responseString = stream.ReadToEnd(); 
    }
}

Apache设置gzip压缩已启用并正常工作,因为当从 chrome 浏览器向相同的请求发出请求时,我url可以content-encoding在响应标头中看到。请参阅随附的屏幕截图。

在此处输入图像描述

但是当我使用上面提供的代码Content-Encoding键发出相同的请求时,标题中存在但它的值是空字符串。

为什么content-encoding我的响应标头中缺少值?这是响应标头字符串

Headers = {Connection: keep-alive  Vary: Accept-Encoding  Content-Encoding:   Access-Control-Allow-Origin: *  Content-Length: 36954  Content-Type: text/html; charset=UTF-8  Date: Fri, 18 Sep 2020 11:31:25 GMT  Server: nginx/1.10.2  X-Powered-By: PHP/5.3.3    }
4

1 回答 1

0

以防其他人遇到同样的问题。在我的情况下,问题是一致的

request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

我已将其更改为

request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");

这对我来说很奇怪,因为我的项目 .Net 版本是 4.7.1 但是现在它可以正常工作了。

于 2020-09-18T12:36:51.327 回答