【问题标题】: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】:

    HTTP 1.1 使用 US-ASCII 作为请求中的 request line、响应中的 status line(reason phrase 除外)和 field names 的基本字符集,但允许字段值中的任何八位字节和 @ 987654325@.

    【讨论】:

    • “字段名”是指 http 标头?
    • @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 字符组成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-27
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      • 2013-04-07
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      相关资源
      最近更新 更多