是否可以在HTTP头字段中包含多个CRLF?
下面是最新的HTTP RFC 7230中的HTTP消息定义是否可以在HTTP头字段中包含多个CRLF?,http,networking,network-programming,http-headers,network-protocols,Http,Networking,Network Programming,Http Headers,Network Protocols,下面是最新的HTTP RFC 7230中的HTTP消息定义 HTTP-message = start-line *( header-field CRLF ) CRLF [ message-body ] 下面是标题字段的定义 header-field = field-name ":" OWS field-value OWS field-name = token f
HTTP-message = start-line
*( header-field CRLF )
CRLF
[ message-body ]
下面是标题字段的定义
header-field = field-name ":" OWS field-value OWS
field-name = token
field-value = *( field-content / obs-fold )
field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
field-vchar = VCHAR / obs-text
obs-fold = CRLF 1*( SP / HTAB )
…和:
obs-text = %x80-FF
…和:
我们可以看到,字段值可以有多个obs折叠,obs折叠有一个CRLF。这对我来说很奇怪,因为我认为CRLF是头球线的终点。是否有将多个CRLF编码到一个标头字段的示例?或者,我是否误解了定义?您对标准的理解是正确的。过去,在下支持多行标题值。此功能称为“折线”: 如果延续行以空格或水平制表符开头,HTTP/1.1标头字段值可以折叠到多行。所有线性空白(包括折叠)与SP具有相同的语义。在解释字段值或向下游转发消息之前,收件人可以用单个SP替换任何线性空白 因此,以下两种形式是等效的:
Header: value1, value2
及
较新的版本明确反对这一点。事实上,“obs折叠”中的“obs”代表“过时”
历史上,HTTP头字段值可以扩展到多个
通过在每一额外行之前至少添加一个空格或
水平选项卡(obs折叠)。本规范不推荐这种产品线
折叠,消息/http媒体类型内除外(第8.3.1节)。A.
发件人不得生成包含折线的邮件(即。,
包含与obs折叠规则匹配的任何字段值)
除非消息用于在消息/http中打包
媒体类型
因此,尽管我在实践中从未见过这个特性(或者至少没有注意到),但它确实存在。此外,行折叠似乎还没有完全被弃用,它仍然允许用于HTTP媒体类型头
多行标头仍然受标准HTTP标头解析器的支持,这些解析器使用的语言包括[]和
我能找到的唯一一个这样一个标题的具体例子是在这幅图中:
请注意
内容类型
标题中的黄色0d 0a
(回车,换行)。是否尝试在每个CRLF之前添加空格?它本身的一个空行表示HTTP头的结束。我没有做任何练习。我只是对头字段的ABNF定义是否正确感到困惑。因此,您要问的是,HTTP的RFC中是否存在错误——这是地球上使用最广泛、审查最广泛的信息传输协议之一。是的。但是,我不确定这是一个错误还是我的误解。@appleleaf,复制品?@Malt,OP在问“是否有一个例子,多个CRLF被编码到一个标题字段?”。您的示例仅显示一个CR LF HT序列。。。。换句话说,它没有回答这个问题。@Pacerier在Conten-Type头字段中有两个CRLF。一个是黄色的,在田野中间。另一个在字段的末尾,在下一个字段之前,作为正常的HTTP头字段分隔符。您指的是?如果是这样的话,OP不是这么说的。他说的是多个obs折叠,换句话说,不仅仅是“CR
LF
”,而是“CR
LF
HT
/SP
”。红色圆圈是“CR
LF
”和“CR
LF
”。@Pacerier OP特别询问了“多个crlf..编码到一个标题字段中”。该示例显示内容类型字段中的CRLF,该字段也以CRLF结尾。是的,它不是多重的obs折叠
,但我不认为这是问题所在。我知道这个答案有点旧,但是你写了,而且行折叠似乎还没有完全被弃用,它仍然允许用于HTTP媒体类型头。
。HTTP媒体类型头是什么,是否有这样一个例子,使用现在不推荐的头行折叠?
Header: value1, value2
Header: value1,
value2