【问题标题】:Why cant I see the Content-Encoding: gzip response in my c# HttpClient response header?为什么我在 c# HttpClient 响应标头中看不到 Content-Encoding: gzip 响应?
【发布时间】:2017-09-02 14:28:21
【问题描述】:

我正在制作一个简单的 c# 程序来确定服务器端压缩是否在各种服务器上可用/启用。这是我下面的请求代码。

using (var client = new HttpClient())
{
    client.Timeout = new TimeSpan(0, 0, 5);
    client.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
    client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36");
    client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, sdch, br");
    var httpClientResponse = client.GetAsync(websiteURL).Result;
    string header = httpClientResponse.Headers.GetValues("Content-Encoding").First();
}

通过查看提琴手中的请求,我可以看到该请求已启用压缩,但是我似乎无法从代码中的响应标头中提取该信息。

这些是请求和响应的完整标头。

GET https://www.dobbies.com/ HTTP/1.1
Accept: text/html, application/xhtml+xml, application/xml; q=0.9, image/webp, */*; q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36
Accept-Encoding: gzip, deflate, sdch, br
Host: www.dobbies.com

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: 
Set-Cookie: ASP.NET_SessionId=hx1rb34ottgfritgt3rciql4; path=/; secure; HttpOnly
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
X-Xss-Protection: 1; mode=block
Date: Fri, 07 Apr 2017 08:06:17 GMT
Content-Length: 16836

这是我使用httpClientResponse.Headers时得到的结果

{
    Vary: Accept-Encoding
    X-Frame-Options: SAMEORIGIN
    X-Content-Type-Options: nosniff
    Strict-Transport-Security: max-age=31536000
    X-Xss-Protection: 1; mode=block
    Cache-Control: private
    Date: Fri, 07 Apr 2017 08:06:17 GMT
    Set-Cookie: ASP.NET_SessionId=hx1rb34ottgfritgt3rciql4; path=/; secure; HttpOnly
    Server: 
}

如您所见,Content-Encoding 的标头:响应中缺少 gzip。

为什么会缺少此标头?和其他人一起。把我的标题还给我!

【问题讨论】:

    标签: c# httpclient http-compression


    【解决方案1】:

    找到问题了。

    HttpClient 方法返回的HttpResponseMessage 有两个标头属性:

    HttpResponseMessage.Headers 是一个带有通用响应头的HttpResponseHeaders

    HttpResponseMessage.Content.Headers 是一个HttpContentHeaders,带有特定于内容的标头,例如Content-Type

    【讨论】:

      猜你喜欢
      • 2020-07-15
      • 2015-12-13
      • 2020-02-11
      • 2014-09-09
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 2021-08-13
      • 2017-09-21
      相关资源
      最近更新 更多