【问题标题】:In HTTP specification, what is the string that separates cookies?在 HTTP 规范中,分隔 cookie 的字符串是什么?
【发布时间】:2011-01-30 15:02:20
【问题描述】:

分号;Cookie: 字符串还是其他字符串?

【问题讨论】:

标签: http http-headers rfc httpcookie


【解决方案1】:

在 HTTP 请求中检查 cookie

Cookie: 标头具有以下语法:

Cookie: <Name> = <Value> { ; <Name> = <Value> }

因此单独的 cookie 是分开的 with the semicolon and a space

在 HTTP 响应中设置 cookie

另一方面,在响应中设置 cookie 时,每个 Set-Cookie: 标头都有一个 cookie:

Set-Cookie: <Name> = <Value> [ ; expires = <Date>] [ ; path = <Path> ] [ ; domain = <Domain> ] // etc…

要设置多个 cookie,Set-Cookie 标头会在 HTTP 响应中重复。


注意事项:

  • 查看here 获取示例教程,查看RFC 6265 HTTP State Management Mechanism 获取显示语法完整细节的规范参考。
  • 现已废弃的 RFC 2965 定义了一对备用的标头 Cookie2Set-Cookie2,它们已被废弃。
  • HTTP 状态管理机制RFC 2109RFC 2965)的过时版本提供了一种将多个Set-Cookie(或Set-Cookie2)标头合并为一个的方法。但是,最新的RFC 6265 规范不推荐这种折叠方式。

【讨论】:

  • 另一方面,在响应中设置 cookie 时,每个 Set-Cookie: 标头都有一个 cookie: 不正确。 在部分RFC 2109 的 4.2.1 读取 源服务器可能在响应中包含多个 Set-Cookie 标头。请注意,中间网关可以将多个此类标头折叠成单个标头。在同一 RFC 的第 4.2.2 节中,非正式地,Set-Cookie 响应标头包含令牌 Set-Cookie:,然后由一个或多个 cookie 的逗号分隔列表。
  • @PiotrDobrogost RFC 2109 已被 RFC 2965 淘汰,而 RFC 2965 又被 RFC 6265 淘汰。最新规范建议避免 Set-Cookie 折叠。 2109 和 2965 都不支持在提供的 ABNF 语法中折叠。感谢您指出这种歧义。我将在我的回复中修复 RFC 参考。
  • 2109 和 2965 都不支持在所呈现的 ABNF 语法中折叠。 不正确 所呈现的 ABNF 语法显然支持多个 cookie 在一个 Set-Cookie标题(折叠) - 看我的答案。
  • 因此各个 cookie 用分号分隔。 不正确。您提供的 Cookie: 标头语法中的分号分隔每个 &lt;Name&gt;=&lt;Value&gt; 对而不是每个 cookie,因为每个 cookie 可以有任意数量的此类对。
  • “用分号分隔” - 虽然,它们实际上是用分号 + 空格(2个字符)分隔的。 developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cookie
【解决方案2】:

答案是逗号,

RFC 2109 的第 4.2.2 节中有 Set-Cookie 标头的规范

   set-cookie      =       "Set-Cookie:" cookies
   cookies         =       1#cookie

使用以下语句非正式地,Set-Cookie 响应标头包含令牌 Set-Cookie:,后跟一个或多个 cookie 的逗号分隔列表。# 的正式含义在上述符号在 A. NOTATIONAL CONVENTIONS 部分的RFC 733 中定义,第 5 点

定义了一个构造“#”,类似于“*”,如下:

              <l>#<m>element

表示至少 &lt;l&gt; 和最多 &lt;m&gt; 元素,每个元素之间用 一个或多个逗号 (",")。

是的,RFC 2109 已被 RFC 2965 淘汰,而后者又被 RFC 6265 淘汰。
不,在这种情况下它不会改变任何东西

  • 现有的大多数 HTTP 服务器和客户端都支持 RFC 2109
  • RFC 6265禁止Set-Cookie折叠

【讨论】:

  • 这很重要。 RFC 6265 应该描述 UA 的实际作用。
  • @JulianReschke 那么在这种情况下,您能否告诉我们哪些流行的 UA 处理折叠的 Set-Cookie 标头?
  • Piotr,我不知道,我也没有这么说。我只是指出 RFC 6265 应该准确定义 cookie 的工作方式,而不是旧的 RFC。
  • -1 因为这个答案直接与接受的答案相矛盾,而且这个答案的作者甚至承认它不是接受答案的 cmets 线程中的逗号。不应该完全删除这个答案吗??
  • RFC 6265 不禁止 Set-Cookie 折叠(可能是为了向后兼容),但它不鼓励使用“应该” NOT": "源服务器不应该将多个 Set-Cookie 头域折叠成一个头域。"
猜你喜欢
  • 2012-02-08
  • 1970-01-01
  • 2014-12-05
  • 2010-12-17
  • 2014-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多