在HTTP中,您可以在请求中指定客户端可以使用accept头(例如application/xml )接受响应中的特定内容。内容类型规范允许在内容类型(如charset=utf-8 )中包含参数,指示您可以接受具有指定字符集的内容。
还有accept-charset头,它指定客户端接受的字符编码。
如果指定了两个标头,并且accept标头包含具有charset参数的内容类型,那么服务器应该将哪个标头视为上级标头?
例如:
Accept: application/xml; q=1,
text/plain; charset=ISO-8859-1; q=0.8
Accept-Charset: UTF-8我使用Fiddler向各种服务器发送了几个示例请求,以测试它们如何响应:
示例
W3
请求
GET http://www.w3.org/ HTTP/1.1
Host: www.w3.org
Accept: text/html;charset=UTF-8
Accept-Charset: ISO-8859-1响应
Content-Type: text/html; charset=utf-8请求
GET http://www.google.co.uk/ HTTP/1.1
Host: www.google.co.uk
Accept: text/html;charset=UTF-8
Accept-Charset: ISO-8859-1响应
Content-Type: text/html; charset=ISO-8859-1StackOverflow
请求
GET http://stackoverflow.com/ HTTP/1.1
Host: stackoverflow.com
Accept: text/html;charset=UTF-8
Accept-Charset: ISO-8859-1响应
Content-Type: text/html; charset=utf-8Microsoft
请求
GET http://www.microsoft.com/ HTTP/1.1
Host: www.microsoft.com
Accept: text/html;charset=UTF-8
Accept-Charset: ISO-8859-1响应
Content-Type: text/html对于预期的行为,似乎没有任何共识。我想看起来很惊讶。
发布于 2011-09-09 21:17:20
尽管您可以在Accept标头中设置媒体类型,但该媒体类型的charset参数定义在RFC 2616中的任何地方都没有定义(但并不是禁止的)。
因此,如果要实现HTTP1.1兼容的服务器,首先要查找Accept-charset标头,然后在Accept标头上搜索自己的参数。
发布于 2011-09-05 16:44:37
阅读RFC 2616 14.1和14.2节。Accept标头不允许您指定charset。您必须使用Accept-Charset头来代替。
发布于 2016-05-23 17:24:07
首先,Accept头可以接受参数,请参阅RFC 7231第5.3.2节
所有mime类型都可以接受字符集参数。
Accept-Charset头允许用户代理指定它支持的字符集。
如果Accept-Charset头不存在,用户代理必须为它接受的每个text/*媒体类型指定每个text/*参数。
Accept: text/html;charset=US-ASCII, text/html;charset=UTF-8, text/plain;charset=US-ASCII, text/plain;charset=UTF-8https://stackoverflow.com/questions/7055849
复制相似问题