当浏览器向Web服务器发送HTTP请求时,使用什么编码对线路上的HTTP协议进行编码?是ASCII吗? UTF8?还是UTF16?或者它是否指定了它以预定义格式使用的编码(在任何解码发生之前?)
P.S
我不是在询问请求/响应的实际有效负载(例如HTML)。我问的是请求行(即GET /index.html HTTP/1.1
)和标题(即Host: google.com
)
答案 0 :(得分:27)
HTTP 1.1使用US-ASCII作为请求中request line的基本字符集,响应中的status line(reason phrase除外)和field names但允许任何字段值中的八位字节和message body。
答案 1 :(得分:11)
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)>
然后,文档中的其他所有内容都是根据这些实体(OCTET
,CHAR
等)定义的。因此,您可以查看RFC以找出HTTP请求/响应的哪些部分可以包含OCTET
;所有其他部分必须是ASCII。 (我自己做,但需要很长时间)
具体来说,对于请求行,方法名称和HTTP版本将仅为ASCII字符,但URL本身可能包含非ASCII字符。 但如果你看一下RFC 2396,那就说明了。
URI是一组非常有限的字符序列,即基本拉丁字母,数字和一些特殊字符的字母。
我猜这意味着它也包含ASCII字符。