0

我刚刚发布了这个问题,答案马上就来了。反过来,它会产生以下新问题:

如果我的理解是正确的StreamContent,来自 的对象HttpResponseMessage是在通过 发出 HTTP 请求时创建的HttpClient.GetAsync。它的 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">

该站点的响应没有通过元标记中包含的字符集设置并因此以不正确的字符集呈现的原因是什么?

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

在此处输入图像描述


两个请求的 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
4

2 回答 2

0

正如您从 Fiddler 屏幕截图中看到的那样,HttpResponseMessage.Content.Headers.ContentType它将包含Content-type响应标头中指定的内容。

HttpResponseMessage不会解析响应 HTML并搜索任何标签<meta />

于 2016-03-31T10:18:45.427 回答
-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 请求时实际传递的内容。

更好的解释远非这里的范围

于 2016-03-31T09:47:05.917 回答