在 HTTP 标头中,换行符是标头中分隔字段的标记。
但是,如果我不想在自定义字段中发送换行符文字,我应该如何逃避它?
如果您正在设计自己的自定义扩展字段,您可以使用 BASE64 或quoted-printable 来转义(和取消转义)该值。
这个问题的实际答案是没有编码换行符的标准。
您可以使用任何二进制到文本的编码,例如 URL-Encoding 或 Base64,但显然只有在发送者和接收者都实现相同的方法时才会起作用。
RFC 2616确实允许在多行上“折叠”(即换行)标题值,但换行符被视为单个空格字符,而不是解析字段值的一部分。
但是,该规范已被禁止折叠的RFC 7230废弃:
从历史上看,HTTP 标头字段值可以通过在每一额外行之前至少一个空格或水平制表符(obs-fold)来扩展到多行。除了在媒体类型(第 8.3.1 节)内,
本规范不赞成这种行折叠。发件人不得生成包含行折叠的消息message/http
HTTP Header 字段值中的换行标准尚未建立,也从未建立。
这个想法是,HTTP 是唯一ASCII
的,并且不允许换行等。如果发送者和接收者都可以解释你的编码,那么你可以编码任何你想要的,但是你想要的。这就是使用标头处理 DNS 国际名称的方式(称为 PUNYCODE)。Host
简短的回答是:你不需要,除非你同时控制发送者和接收者。
如果它是一个自定义字段,您如何转义它完全取决于目标应用程序将如何解析它。如果这是您创建的一些附加内容,您可以坚持使用 URL 编码,因为它经过验证且真实,并且许多语言都内置了编码/解码方法,因此您的 Web 应用程序将对它和您的插件进行编码(或您正在处理的任何内容) ) 将对其进行解码。