HTTP协议使用哪种编码?

47
当浏览器向 Web 服务器发送 HTTP 请求时,用于编码传输协议的编码是什么?是 ASCII?UTF8?还是 UTF16?或者它是否以预定义格式指定其使用的编码(在任何解码之前)?
注:我不是在询问请求/响应的实际负载(例如 HTML)。我正在问有关请求行(即 GET /index.html HTTP/1.1)和头部信息(即 Host: google.com)的编码方式。
2个回答

39

2
“Field names”指的是HTTP头吗? - Oleg Yablokov
4
@OlegYablokov 可能晚到了派对,但是没错。根据RFC 7230,"header-field"(仅 http header)是由"field-name"和"field-value"组成的一对,两者之间用":"分隔,并且在":"字符和"field-value"之间可以有一个可选的空格。 - Rafał Kopczyński

21

RFC 2616中包含以下内容:

OCTET          = <any 8-bit sequence of data>
CHAR           = <any US-ASCII character (octets 0 - 127)>
UPALPHA        = <any US-ASCII uppercase letter "A".."Z">
LOALPHA        = <any US-ASCII lowercase letter "a".."z">
ALPHA          = UPALPHA | LOALPHA
DIGIT          = <any US-ASCII digit "0".."9">
CTL            = <any US-ASCII control character
                  (octets 0 - 31) and DEL (127)>
CR             = <US-ASCII CR, carriage return (13)>
LF             = <US-ASCII LF, linefeed (10)>
SP             = <US-ASCII SP, space (32)>
HT             = <US-ASCII HT, horizontal-tab (9)>
<">            = <US-ASCII double-quote mark (34)>

然后文档中的其他所有内容都是基于这些实体(OCTETCHAR等)定义的。因此,您可以查看RFC以了解HTTP请求/响应的哪些部分可以包含OCTET;所有其他部分必须是ASCII字符。(我自己可以做,但需要很长时间)

特别针对请求行,方法名称和HTTP版本只能使用ASCII字符,但URL本身可能包含非ASCII字符。但是如果您查看RFC 2396,它说:

URI是一个非常有限的字符序列,即基本拉丁字母、数字和一些特殊字符。

这意味着它也将由ASCII字符组成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接