重复的 HTTP 响应标头是否可以接受?

2023-11-24

我还没有找到任何关于标准是否允许重复的 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”这样的写法?


Yes

HTTP RFC2616 可用here says:

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

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

缓存控制记录如下:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9像这样:

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

The #1cache-directive语法定义了至少一个缓存指令元素的列表(请参阅此处了解 #values 的正式定义:符号约定和通用语法)

So, yes,

Cache-Control: no-cache, no-store

相当于(顺序很重要)

Cache-Control: no-cache
Cache-Control: no-store
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重复的 HTTP 响应标头是否可以接受? 的相关文章

随机推荐