重复的HTTP响应头可以接受吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (248)

我还没有找到关于标准是否允许重复的HTTP响应头的规范,但是我需要知道这是否会导致兼容性问题。

假设我有这样的响应标题:

HTTP/1.1 302 Moved Temporarily
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.4; JBoss-4.0.3SP1 (build: CVSTag=JBoss_4_0_3_SP1 date=200510231054)/Tomcat-5.5
Cache-Control: no-cache
Cache-Control: no-store
Location: http://localhost:9876/foo.bar
Content-Language: en-US
Content-Length: 0
Date: Mon, 06 Dec 2010 21:18:26 GMT

请注意,有两个Cache-Control标头具有不同的值。浏览器是否总是把它们看作是像“Cache-Control:no-cache,no-store”一样写的?

提问于
用户回答回答于

HTTP RFC2616 说:

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

因此,如果整个字段值被定义为逗号分隔的值列表,那么多个具有相同名称的头是可以的(www-authenticate就是这种情况)。

像这样:

Cache-Control   = "Cache-Control" ":" 1#cache-directive

#1cache-directive语法定义了至少一个缓存指示元素的列表

所以,是的,

Cache-Control: no-cache, no-store

相当于(顺序很重要)

Cache-Control: no-cache
Cache-Control: no-store

扫码关注云+社区

领取腾讯云代金券