我应该使用什么字符编码的HTTP头?
我正在使用一个“有趣”的HTML特殊字符(✰)(请参阅http://html5boilerplate.com/获取更多信息) Server
HTTP头,并且想知道是否每个规范“允许”。
-
在Windows Xp Pro SP 3的Chrome中,使用“开发工具”中的“networking”选项卡,我可以看到✰。
-
在IE8中,✰ 不能正确显示。
-
w3.org HTMLvalidation器不能正确显示(显示“
â°
”代替)。
现在,我不太喜欢字符编码……坦率地说,我并不太在乎它们; 我只是盲目地使用UTF-8 cus我被告知。 🙂
在不同的parsing器/浏览器/引擎/(无论他们被称为)的错误造成的差距?
有没有这个规范,或者HTTP头“值”允许字符的列表?
简而言之:只有ASCII可以保证工作。 一些非ASCII字节允许向后兼容,但不应该是可显示的。
HTTPbis放弃了,并指定在头文件除了ASCII之外没有其他有用的编码:
历史上,HTTP允许字段内容使用ISO-8859-1字符集[ISO-8859-1]中的文本,仅通过使用[RFC2047]编码来支持其他字符集。 实际上,大多数HTTP头字段值只使用US-ASCII字符集[USASCII]的一个子集。 新定义的头字段应该将其字段值限制为US-ASCII八位字节。 接收者应该将字段内容(obs-text)中的其他八位字节视为不透明的数据。
以前,1999年的RFC 2616对此进行了定义:
只有当根据RFC 2047 [14]的规则进行编码时,* TEXT的字可以包含来自ISO-8859-1 [22]以外的字符集的字符。
RFC 2047是MIME编码 ,所以它是:
=?UTF-8?Q?=E2=9C=B0?=
但我认为很多(如果有的话)客户都支持它。
请先阅读评论,这个答案很可能从正确的来源得出错误的结论,需要编辑。
您可以使用任何可打印的ASCII字符,并且不能使用特殊的字符(如:不是ASCII )
提示 :你可以用JSON编码任何东西。
编辑 :首先可能不明显,头中定义的字符编码只适用于响应体,而不适用于头本身。 (因为这会导致鸡与鸡蛋的问题。)
我想根据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是空格或制表符,但您可以通过在空格或制表符之前开始新行来将字段值分成多行。
让我们简化为:
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字符都是允许的。