是否允许HTTP客户端发送多个具有相同名称的标头?

时间:2016-09-27 22:28:22

标签: http

我知道HTTP服务器可以发送带有重复密钥的标头(至少会出现Set-Cookie),但客户是否有合理的理由这样做?

2 个答案:

答案 0 :(得分:1)

RFC 7230在某些情况下允许重复标头。来自section 3.2.2

  

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

     

收件人可以将多个标题字段与同一字段组合在一起      将名称命名为一个"字段名称:字段值"一对,没有改变      消息的语义,通过附加每个后续字段值      按顺序组合的字段值,以逗号分隔。

一个有点"合理的"场景浮现在脑海中:当HTTP请求通过代理时,代理可能只是在另一个标头上(例如,X-Forwarded-For或额外的Accept-Encoding),而不是确定是否已经有标头存在,然后相应地解析和修改它。

从技术上讲,任何客户都是"允许"发送多个具有相同名称的标头,只要它符合上述RFC 7230中的要求。

答案 1 :(得分:0)

a)涉及多段代码时可能会更容易,

b)对于某些字段,例如Set-Cookie,这是不可避免的(见https://greenbytes.de/tech/webdav/rfc7230.html#rfc.section.3.2.2.p.4)。