Какая кодировка используется протоколом HTTP? - PullRequest
30 голосов
/ 04 мая 2009

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

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

Ответы [ 2 ]

27 голосов
/ 04 мая 2009

HTTP 1.1 использует US-ASCII в качестве базового набора символов для строки запроса в запросах, строки состояния в ответах (за исключением фразы-причины ) и имена полей , но допускается любой октет в значениях полей и тело сообщения .

11 голосов
/ 04 мая 2009

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.

...