HTTP协议使用哪种编码?

30 protocols http network-protocols http-headers

当浏览器向Web服务器发送HTTP请求时,使用什么编码对线路上的HTTP协议进行编码?是ASCII吗?UTF8?还是UTF16?或者它是否指定了它以预定义格式使用的编码(在进行任何解码之前?)

PS我不是在询问请求/响应的实际有效负载(例如HTML).我问的是请求行(即GET /index.html HTTP/1.1)和标题(即Host: google.com)

Gum*_*mbo 27

HTTP 1.1使用US-ASCII作为请求中请求行的基本字符集,响应中的状态行(原因短语除外)和字段名称但允许字段值和消息体中的任何八位字节.

  • @OlegYablokov 可能会迟到,但是是的。根据[RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2),“header-field”(只是http header)是一对“field-name”和“field -value”由“:”分隔,“:”字符和“field-value”之间有一个可选空格。 (4认同)
  • 我知道我们应该**期待**一个理由短语,但你的意思是它是**除了** - 离子吗?;-) (2认同)
  • “字段名称”是指 http 标头吗? (2认同)

Dav*_*d Z 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)>
Run Code Online (Sandbox Code Playgroud)

而在文档中,然后其他几乎所有这些实体(来定义的OCTET,CHAR等等).因此,您可以查看RFC以找出HTTP请求/响应的哪些部分可以包含OCTETs; 所有其他部分必须是ASCII.(我自己做,但需要很长时间)

具体而言,对于请求行,方法名称和HTTP版本将仅为ASCII字符,但URL本身可能包含非ASCII字符.但是,如果你看一下RFC 2396,就会说.

URI是来自非常有限的集合的字符序列,即基本拉丁字母,数字和一些特殊字符的字母.

我猜这意味着它也包含ASCII字符.