【问题标题】:Which encoding is used by the HTTP protocol?HTTP 协议使用哪种编码?
【发布时间】:2013-09-02 12:48:40
【问题描述】:
当浏览器向 Web 服务器发送 HTTP 请求时,使用什么编码来对网络上的 HTTP 协议进行编码?是ASCII吗? UTF8?还是UTF16?或者它是否指定了它以预定义格式使用的编码(在任何解码发生之前?)
附言
我不是在询问请求/响应的实际有效负载(例如 HTML)。我在询问请求行(即GET /index.html HTTP/1.1)和标头(即Host: google.com)
【问题讨论】:
标签:
http
http-headers
protocols
network-protocols
【解决方案1】:
【讨论】:
-
-
@OlegYablokov 可能会迟到,但是是的。根据RFC 7230,“header-field”(只是http header)是一对“field-name”和“field-value”,用“:”分隔,“:”字符和“field-value”之间有一个可选空格"。
【解决方案2】:
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 请求/响应的哪些部分可以包含 OCTETs;所有其他部分必须是 ASCII。 (我会自己做,但需要很长时间)
对于请求行,方法名称和 HTTP 版本将仅为 ASCII 字符,但 URL 本身可能包含非 ASCII 字符。 但是如果你看RFC 2396,它会这么说。
URI 是一组非常有限的字符序列,即基本拉丁字母的字母、数字和一些特殊字符。
我猜这意味着它也将由 ASCII 字符组成。