HttpResponseMessage.Content.Header忽略html源

时间:2016-03-31 09:38:48

标签: c# dotnet-httpclient httpcontent httpresponsemessage

我刚刚发布了this个问题,答案立刻就出现了。 反过来,它会产生以下新问题:

如果我的理解是正确的,StreamContent对象来自HttpResponseMessage,是在通过HttpClient.GetAsync发出HTTP请求时创建的。它的Header属性或其一部分将根据HTML源文件中包含的元标记进行设置。

例如,元标记可以告诉响应对象哪个字符集对文件的内容进行编码。

<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />

对包含此类行的资源运行请求将生成具有此设置的HttpResponseMessage.Content.Header

在这个问题顶部引用的另一个问题中,我提到了在没有正确编码的情况下创建的响应对象。由于生成此类不兼容响应的HTML源确实包含负责创建正确编码的响应的设置:

<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1255">

该网站的响应未被传递给元标记中包含的字符集设置并因此在不正确的字符集中呈现的原因是什么?

以下是该问题的图片描述: 这两个网站都包含带有字符集设置的元标记,但由于某种原因,它会错过它...

enter image description here

Fiddler的两个请求的标题详细信息:

工作一个: (删除了cookie标题)

请求

GET http://www.ynet.co.il/home/0,7340,L-8,00.html HTTP/1.1
Host: www.ynet.co.il
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
If-Modified-Since: Thu, 31 Mar 2016 10:04:39 GMT

响应:

HTTP/1.1 200 OK
vg_id: 1
X-me: 06
Content-Type: text/html; charset=UTF-8
Last-Modified: Thu, 31 Mar 2016 10:38:57 GMT
Accept-Ranges: bytes
VX-Cache: HIT
WAI: 01
V-TTL: 0
backend-cache-control: 
Content-Length: 410685
Vary: Accept-Encoding
Date: Thu, 31 Mar 2016 10:38:48 GMT
Connection: keep-alive

有问题的一个:

请求:

GET http://winedepot.co.il/ HTTP/1.1
Host: winedepot.co.il
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: __utma=201832727.725995063.1458660502.1459413977.1459418530.8; __utmz=201832727.1458660502.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none); __utmc=201832727; ASPSESSIONIDCQTRQCAQ=FEOHEBFCBGABBKOBAHOGKBGB
Connection: keep-alive

响应:

HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 118225
Content-Type: text/html
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Thu, 31 Mar 2016 10:36:21 GMT

2 个答案:

答案 0 :(得分:0)

从您的Fiddler屏幕截图中可以看出,HttpResponseMessage.Content.Headers.ContentType将包含响应的Content-type标题中指定的内容。

HttpResponseMessage解析回复HTML并搜索任何<meta />代码。

答案 1 :(得分:-1)

内容类型来自HTTP HEADER

https://en.wikipedia.org/wiki/List_of_HTTP_header_fields

<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />

是内容的一部分,而不是标题的一部分。

我建议您安装应用程序Fiddler 更好地了解这些请求实际上做了什么。 将fiddler设置为您的代理,并使用检查器查看发出http请求时实际传递的内容。

更好的解释远不是这里的范围