用于将单个HTTP标头的多个值添加到请求或响应的标准

时间:2010-06-22 20:31:14

标签: http httpwebrequest http-headers

如果我想将值列表添加为HTTP标头,是否有标准方法可以执行此操作?我在RFC 822中找不到任何(我可以很容易理解的)。例如,是 逗号分隔值标准或分号分隔值。是否有标准?

示例:

Key: value1;value2;value3

3 个答案:

答案 0 :(得分:79)

您需要查看HTTP规范RFC 2616,其中包含:

  

多个消息标题字段   可能存在相同的字段名称   当且仅当整个   该标题字段的字段值是   定义为以逗号分隔的列表   [即#(值)]。它必须是可能的   组合多个标题字段   成为一个“字段名称:字段值”   对,不改变语义   通过附加每个消息   后续的字段值到第一个,   每个用逗号分隔。命令   其中头字段具有相同的   因此,收到字段名称   重要的解释   组合字段值,因此a   代理不得改变顺序   消息的这些字段值   转发。

这意味着您可以在具有不同值的响应中多次发送相同的标头,只要这些值可以使用逗号相互附加。这也意味着您可以通过用逗号连接来在单个标头中发送多个值。

所以在你的情况下它将是:

Key: value1,value2,value3

答案 1 :(得分:5)

无论如何@ marc-novakowski你缩小了“问题”:)

  

通常(根据HTTP规范)我们使用逗号','

分隔其他值

但我们会研究一个简单的案例:

var text = "here come dat boi o shit waddup";
var exmaple = /[a-zA-Z0-9 ]/; // allowes a-zA-Z0-9 and whitespaces but nothing else right?
example.test(test); // would return true right?

text = "%coconut$§=";
example.test(text); // would return false right?

//I know this is very basic - I started learnig all this about week ago

如果用逗号分隔彼此的值,你如何加入这样的标题 - 可以出现昏迷的情况???

那么“客户”的责任是选择并决定策略,例如 drop,merg (如果merg如何)?

请注意Mozilla对 nsHttpHeaderArray的实现

https://github.com/bnoordhuis/mozilla-central/blob/master/netwerk/protocol/http/nsHttpHeaderArray.h#L185

  

在这种情况下,mozilla选择使用换行符分隔符'\ n'(对于某些标题字段名称)

当你面对这种情况时,我鼓励你们寻找共同的现有解决方案 - 因为他们提供了熟悉的方案

答案 2 :(得分:4)

但是,并非具有相同字段名称的所有值都可以组合到字段值列表中。例如,在RFC 7230我们可以阅读

  

注意:在实践中," Set-Cookie"标题字段([RFC6265])经常         在响应消息中多次出现并且不使用         列表语法,违反了多个标题的上述要求         具有相同名称的字段。既然它不能合并成一个         单个字段值,收件人应该处理" Set-Cookie"作为一个         处理标题字段时的特殊情况。 (见附录A.2.3         [Kri2001]详情。)