问题:Vary
当服务器接受 gzip/deflate 连接并为移动客户端提供不同的内容时,发送 HTTP 标头的最佳方式是什么?
我看到了两种可能的变体,但我找不到任何有用的信息,无论它们是否正确和/或大多数代理和搜索引擎都支持:
- 将变体组合成一行:
Vary: Accept-Encoding,User-Agent
- 发送两个单独的标头:
Vary: Accept-Encoding
Vary: User-Agent
欢迎任何信息或适当的 W3C 标准的链接:)
问题:Vary
当服务器接受 gzip/deflate 连接并为移动客户端提供不同的内容时,发送 HTTP 标头的最佳方式是什么?
我看到了两种可能的变体,但我找不到任何有用的信息,无论它们是否正确和/或大多数代理和搜索引擎都支持:
Vary: Accept-Encoding,User-Agent
Vary: Accept-Encoding
Vary: User-Agent
欢迎任何信息或适当的 W3C 标准的链接:)
两者都是有效的(并且意思相同)。
不,W3C 在这里不相关。您需要查看 IETF RFC 7230 和 7231。
两种情况下允许多个具有相同名称的标头字段:
Set-Cookie
值始终为列表的所有标头字段(以逗号分隔的值)
示例:Accept-Encoding
, Vary
, ...
RFC 7230 - 3.2.2
发送者不得在消息中生成具有相同字段名称的多个头字段,除非该头字段的整个字段值被定义为逗号分隔列表 [即,#(values)] 或头字段是一个很好的-已知异常(如下所述)。
接收者可以将多个具有相同字段名称的头字段组合成一个“字段名称:字段值”对,而不改变
消息的语义,方法是将每个后续字段值按顺序附加到组合的字段值上,用 a 分隔逗号。
因此,接收具有相同字段名称的头字段的顺序
对于组合字段
值的解释很重要;
转发消息时,代理不得更改这些字段值的顺序。注意:在实践中,“Set-Cookie”头域([RFC6265])在响应消息中经常出现多次,并且不使用列表语法,违反了上述对多个同名头域的要求。由于它不能组合成单个字段值,因此接收者在处理标头字段时应将“Set-Cookie”作为特殊情况处理。(详见 [Kri2001] 的附录 A.2.3。)