Какая кодировка используется протоколом HTTP?

Когда браузер отправляет HTTP-запрос на веб-сервер, какая кодировка используется для кодирования протокола HTTP на проводе? Это ASCII? UTF8? или UTF16? Или он указывает, какую кодировку он использует в предопределенном формате (до того, как произойдет какое-либо декодирование?)

P.S Я не спрашиваю о фактической полезной нагрузке (например, HTML) запроса/ответа. Я спрашиваю о строке запроса (т.е. GET /index.html HTTP/1.1) и заголовках (т.е. Host: google.com)

Ответ 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-запроса/ответа могут включать OCTET s; все остальные части должны быть ASCII. (Я бы сделал это сам, но это займет много времени)

Для строки запроса конкретно имя метода и версия HTTP должны быть только ASCII-символами, но возможно, что сам URL-адрес может содержать символы, отличные от ASCII. Но если вы посмотрите на RFC 2396, это говорит о том, что.

URI - это последовательность символов из очень ограниченного набора, то есть буквы основного латинского алфавита, цифры и несколько специальных символов.

Я предполагаю, что он будет состоять из символов ASCII.