如何在HTTP标头中转义换行符?

Dan*_*ira 11 http-headers

在HTTP标头中,换行符是用于分隔标题中的字段的标记.

但是,如果我不想在自定义字段中发送换行字符,我应该如何逃避呢?

jom*_*omo 10

这个问题的实际答案是没有编码换行符的标准。

您可以使用任何二进制到文本编码,例如 URL-Encoding 或 Base64,但显然只有在发送方和接收方都实现相同的方法时才能使用。


RFC 2616确实允许在多行上“折叠”(即换行)标头值,但换行符被视为单个空格字符,而不是解析字段值的一部分。

但是,该规范已被禁止折叠的RFC 7230废弃:

从历史上看,HTTP 标头字段值可以通过在每个额外的行之前至少添加一个空格或水平制表符(obs-fold)来扩展到多行。除了在媒体类型中第 8.3.1 节),
本规范不赞成这种行折叠发送者不得生成包含行折叠的消息message/http

HTTP Header 字段值中的换行符标准没有——也从来没有——建立。


Den*_*s C 8

如果您正在设计自己的自定义扩展字段,则可以使用BASE64或quoted-printable来转义(和取消)该值.


Jam*_*ead 6

根据RFC2616 4.2 消息头

通过在每个额外的行之前至少添加一个 SP 或 HT,可以将标题字段扩展到多行。

其中 SP 表示空格字符 (0x20),HT 表示水平制表符 (0x09)。

  • 不要指望换行符会在您的应用程序可能获得的解析版本中出现;这种机制从 RFC822 历史上就存在,只是为了将长标题行折叠成 80 个字符。 (3认同)

uni*_*n83 5

我们的想法是,HTTP是ASCII- 和换行,并如不允许的.如果发送方和接收方都可以解释您的编码,那么您可以根据需要对任何内容进行编码.这就是用Host标题处理DNS国际名称的方式(称为PUNYCODE).

简短的回答是:你没有,除非你控制发送者和接收者.