17

在 HTTP 标头中,换行符是标头中分隔字段的标记。

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

4

5 回答 5

11

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

于 2009-02-06T17:48:25.490 回答
10

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

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


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

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

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

HTTP Header 字段值中的换行标准尚未建立,也从未建立。

于 2015-10-05T16:28:00.340 回答
6

根据RFC2616 4.2 消息头

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

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

于 2009-02-06T17:49:01.463 回答
4

这个想法是,HTTP 是唯一ASCII的,并且不允许换行等。如果发送者和接收者都可以解释你的编码,那么你可以编码任何你想要的,但是你想要的。这就是使用标头处理 DNS 国际名称的方式(称为 PUNYCODE)。Host

简短的回答是:你不需要,除非你同时控制发送者和接收者。

于 2011-12-28T01:45:22.790 回答
1

如果它是一个自定义字段,您如何转义它完全取决于目标应用程序将如何解析它。如果这是您创建的一些附加内容,您可以坚持使用 URL 编码,因为它经过验证且真实,并且许多语言都内置了编码/解码方法,因此您的 Web 应用程序将对它和您的插件进行编码(或您正在处理的任何内容) ) 将对其进行解码。

于 2009-02-06T17:48:27.063 回答