HTTP验证:组合多个标头

时间:2016-10-16 22:06:59

标签: validation http parsing http-headers

HTTP / 1.1规范定义了以下有关多个头字段的请求:

  

发件人不得生成具有相同字段的多个标题字段      在消息中命名,除非该字段的整个字段值      标题字段定义为以逗号分隔的列表[即#(值)]      或标题字段是一个众所周知的例外(如下所述)。

     

收件人可以将多个标题字段与同一字段组合在一起      将名称命名为一个"字段名称:字段值"一对,没有改变      消息的语义,通过附加每个后续字段值      按顺序组合的字段值,以逗号分隔。命令      其中接收到具有相同字段名称的头字段      因此对组合领域的解释具有重要意义      值;代理不得更改这些字段值的顺序      转发消息。

用于解析请求:

  • 我是否需要先合并标题(以逗号分隔),然后验证合并标题?

  • 在将它们合并到一个标题之前,我是否需要单独验证每个标头?

  • 这是不确定的,我可以选择我喜欢的任何选项吗?

这会产生影响的一个例子是:

GET / HTTP/1.1
Host: 127.0.0.1
Upgrade: foo
Upgrade: 
Upgrade: bar

此处,第二个单独的标头本身无效(因为升级标头至少需要1个协议)。但是,所有三个标题的组合都变为foo,,bar,这是允许的。

当规范说它至少需要1个时:这是针对完整的组合标题,还是单个标题?

1 个答案:

答案 0 :(得分:0)

用于完全组合的标题字段。因此,必须接受一个没有字段值的“升级:”(尽管发送是非法的)。