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

时间:2009-02-06 17:33:23

标签: http-headers

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

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

5 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:5)

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

简短回答是:除非你控制发送者和接收者,否则你不会这样做。

答案 2 :(得分:4)

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

您可以使用任何Binary-to-text encoding,例如URL-Encoding或Base64,但显然只有发送方和接收方都采用相同的方法才能正常工作。

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

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

  

历史上,HTTP标头字段值可以通过在每个额外的行前面至少有一个空格或水平制表符(obs-fold)来扩展到多行。
  此规范弃用此类折叠message/http媒体类型Section 8.3.1除外。
  发件人绝不能生成包含换行的讯息

HTTP标头字段值中的换行标准不是 - 而且从未 - 已经建立。

答案 3 :(得分:3)

根据RFC2616 4.2 Message Headers

  

标题字段可以扩展   通过每个额外的前面多行   至少有一个SP或HT。

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

答案 4 :(得分:1)

如果它是一个自定义字段,你如何逃避它完全取决于目标应用程序将如何解析它。如果这是你创建的一些添加,你可以坚持使用URL编码,因为它非常有用并且很多,并且许多语言都内置了编码/解码方法,所以你的网络应用程序会编码它和你的插件(或者你正在处理的任何事情) )会解码它。