HTTP响应中的标头顺序是否重要?

时间:2009-04-15 04:39:25

标签: http-headers

标题的顺序是

是否有意义
A: 1
B: 2

VS

B:2
A:1

我试图找出是否可以使用字典存储标题列表,或者是否需要某种列表或有序字典。

5 个答案:

答案 0 :(得分:64)

不,对于名称不同的标题无关紧要。请参阅RFC 2616,第4.2节:

  

具有不同字段名称的标题字段的顺序      收到的并不重要。但是,发送是“好习惯”      首先是general-header字段,然后是request-header或response-      标题字段,以实体标题字段结尾。

但是,对于具有相同名称的多个标题,这很重要:

  

具有相同字段名称的多个消息头字段可以是      当且仅当整个字段值出现在消息中时出现      标题字段被定义为以逗号分隔的列表[即,#(值)]。      必须可以将多个标题字段合并为一个      “field-name:field-value”对,不改变语义      消息,通过将每个后续字段值附加到第一个,每个      用逗号分隔。头字段具有相同的顺序      因此收到字段名称是重要的      解释组合字段值,因此代理不得      转发邮件时更改这些字段值的顺序。

答案 1 :(得分:7)

标题的顺序无关紧要。可能存在HTTP标准的“较弱”实现,其中排序确实很重要,但通常不应该这样。

以下是描述HTTP标头的链接:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2

答案 2 :(得分:2)

HTTP标头彼此独立,您可以使用字典存储它们,而不必担心它们的顺序。

答案 3 :(得分:1)

为同一个Cookie指定set-cookie几次也可能很重要:

"Set-Cookie: COOKIE1=VALUE1; ...
"Set-Cookie: COOKIE1=VALUE2; ...

在这种情况下,COOKIE1将设置为VALUE2,如果订单已更改:

"Set-Cookie: COOKIE1=VALUE2; ...
"Set-Cookie: COOKIE1=VALUE1; ...

COOKIE1将设置为VALUE1

答案 4 :(得分:0)

RFC 7230, section 3.2.2: Field Order具体解决了这个问题。这里的引用来自规范的该部分,重点是我补充的:

  

接收具有不同字段名称的标题字段的顺序不重要

为了表现出色,还附有关于良好实践的注释,以证明这一点:

  

但是,好的做法是首先发送包含控制数据的头字段,例如“ Host on request”和“ Date on response”,以便实现者可以决定何时不尽早处理消息。

在某些情况下,允许一条消息包含多个具有相同名称的头字段。在这种情况下,顺序很重要。

  

接收者可以通过将每个随后的字段值按顺序附加到合并的字段值上,而无需更改消息的语义,接收者可以将具有相同字段名的多个头字段组合为一对“字段名:字段值”,以逗号分隔。因此,接收具有相同字段名称的字段 的顺序对于合并字段值的解释重要