Какую кодировку символов я должен использовать для заголовка HTTP?
Я использую "забавный" специальный HTML-символ (✰) (см. http://html5boilerplate.com/ для получения дополнительной информации) для Server
HTTP-заголовок, и мне интересно, разрешено ли это для каждой спецификации.
-
Использование вкладки "Сеть" в инструментах "dev" в Chrome на Windows Xp Pro SP 3 Я вижу, что "отлично".
-
В IE8 ✰ не отображается правильно.
-
Валидатор w3.org HTML не отображает его правильно (вместо этого отображает "â°
" ).
Теперь я не слишком увлекаюсь кодировкой символов... и, откровенно говоря, я не очень-то люблю их; Я просто слепо использую UTF-8 cus, о котором мне говорят.: -)
Является ли несоответствие, вызванное ошибками в разных синтаксических анализах/браузерах/механизмах/(независимо от их имен)?
Есть ли спецификация для этого или, возможно, список допустимых символов для HTTP-заголовка "значение"?
Ответы
Ответ 1
Вкратце: гарантируется только ASCII. Некоторые байты, отличные от ASCII, допускаются для обратной совместимости, но не должны отображаться.
HTTPbis отказался и указал, что в заголовках нет полезной кодировки помимо ASCII:
Исторически, HTTP разрешил содержимое поля с текстом в Шифр ISO-8859-1 [ISO-8859-1], поддерживающий только другие кодировки посредством использования кодировки [RFC2047]. На практике большинство HTTP-заголовков значения поля используют только подмножество кодировки US-ASCII [USASCII]. Новые поля заголовков ДОЛЖНЫ ограничивать свои значения полей Октеты US-ASCII. Получатель ДОЛЖЕН относиться к другим октетам в поле (obs-text) как непрозрачные данные.
Ранее RFC 2616 с 1999 года определял это:
Слова * ТЕКСТ МОЖЕТ содержать символы из наборов символов, отличных от ISO- 8859-1 [22] только при кодировании в соответствии с правилами RFC 2047 [14].
и RFC 2047 - это MIME-кодирование, поэтому это будет:
=?UTF-8?Q?=E2=9C=B0?=
но я не думаю, что многие (если есть) клиенты поддерживают его.
Ответ 2
Пожалуйста, сначала прочитайте комментарии, этот ответ, вероятно, делает неправильные выводы из правильных источников, нуждается в редактировании.
Вы можете использовать любые печатные символы ASCII, а не специальные символы, такие как ✰ (что не является ASCII)
Совет: вы можете закодировать что-нибудь в JSON.
Изменить: сначала не может быть очевидным, кодировка символов, определенная в заголовке, применяется только для тела ответа, а не для самого заголовка. (Так как это вызовет проблему с цыпленком & -egg.)
Я хотел бы подытожить все соответствующие определения в соответствии с spec, связанным с Penchant.
message-header = field-name ":" [ field-value ]
field-name = token
field-value = *( field-content | LWS )
Итак, мы после значения поля.
LWS = [CRLF] 1*( SP | HT )
CRLF = CR LF
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)>
LWS означает линейное белое пространство. По сути, LWS - это Space или Tab, но вы можете разбить значение поля на несколько строк, запустив новую строку перед пробелом или вкладкой.
Пусть это упростит это:
field-value = <any field-content or Space or Tab>
Теперь мы получаем полевое содержание.
field-content = <the OCTETs making up the field-value
and consisting of either *TEXT or combinations
of token, separators, and quoted-string>
OCTET = <any 8-bit sequence of data>
TEXT = <any OCTET except CTLs,
but including LWS>
CTL = <any US-ASCII control character
(octets 0 - 31) and DEL (127)>
token = 1*<any CHAR except CTLs or separators>
separators = "(" | ")" | "<" | ">" | "@"
| "," | ";" | ":" | "\" | <">
| "/" | "[" | "]" | "?" | "="
| "{" | "}" | SP | HT
ТЕКСТ является самым общим и включает в себя все остальное - так же забывайте о остальных.
Вот кодировка US-ASCII (= ASCII)
Как вы можете видеть, разрешены все печатные символы ASCII.