在HTTP规范中,什么字符串用于分隔cookie?

21

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


2个回答

39

检查HTTP请求中的Cookie

Cookie:头部具有以下语法:

Cookie: <Name> = <Value> { ; <Name> = <Value> }
因此,单个cookie使用分号和空格进行分隔。在HTTP响应中设置 cookie时,每个Set-Cookie头部只有一个cookie。
Set-Cookie: <Name> = <Value> [ ; expires = <Date>] [ ; path = <Path> ] [ ; domain = <Domain> ] // etc…
为设置多个cookie,在HTTP响应中重复使用Set-Cookie头部。注意:
  • 点击这里可以查看包含示例的教程,点击RFC 6265 HTTP State Management Mechanism以获取正式参考并了解完整语法细节。
  • 现已废弃的RFC 2965定义了一组替代头部Cookie2Set-Cookie2,但已停用。
  • HTTP State Management MechanismRFC 2109RFC 2965的已过时版本)提供了一种将多个Set-Cookie(或Set-Cookie2)头折叠成一个的方式。然而,最新的RFC 6265规范不推荐使用这种折叠方法。

@PiotrDobrogost RFC 2109已被RFC 2965所取代,而后者又被RFC 6265所取代。最新的规范建议避免使用Set-Cookie折叠。2109和2965都不支持在ABNF语法中呈现折叠。感谢指出这种歧义。我会在我的回复中修正RFC参考。 - Ondrej Tucny
2109和2965都不支持在所呈现的ABNF语法中折叠。这是不正确的。所呈现的ABNF语法明确支持在一个“Set-Cookie”头中使用多个cookie(折叠)-请参见我的答案。 - Piotr Dobrogost
1
因此,个别的 cookie 是用分号分隔的。这是不正确的。你所提供的 Cookie: 标头语法中的分号将每个 <Name>=<Value> 对分开,而不是将每个 cookie 分开,因为每个 cookie 可以有任意数量的这样的对。 - Piotr Dobrogost
@PiotrDobrogost RFC 6265的第4.2.2节写道:“每个cookie-pair代表用户代理存储的一个cookie。”其中cookie-pair = cookie-name "=" cookie-value。因此,您能否提供支持您主张的证据反对投票? - Ondrej Tucny
1
“用分号分隔” - 尽管实际上它们是由分号和空格(2个字符)分隔的。https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Cookie - MrWhite
显示剩余5条评论

1
答案是逗号,符号。

RFC 2109的4.2.2节中,有关于Set-Cookie头的规范说明。

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

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

A construct "#" is defined, similar to "*", as follows:

              <l>#<m>element

indicating at least <l> and at most <m> elements, each separated by one or more commas (",").

是的,RFC 2109已被RFC 2965所取代,而后者又被RFC 6265所取代。
不过,在这个情境下这并没有改变任何事情,因为

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

1
很重要。RFC 6265 应该描述 UAs 实际执行的内容。 - Julian Reschke
@JulianReschke 好的,在这种情况下,您能告诉我们哪些流行的UA 处理折叠的 Set-Cookie 标头吗? - Piotr Dobrogost
彼得,我不知道,也没有说过。我只是指出RFC 6265应该准确定义了Cookie的工作方式,而不是早期的RFC。 - Julian Reschke
4
这个回答直接与被采纳的回答相矛盾,回答者甚至在被采纳的回答的评论中承认这不是一个逗号。这个回答应该被全部删除吗?-1 - theyetiman
RFC 6265并没有禁止Set-Cookie折叠(可能是为了向后兼容),但它使用“SHOULD NOT”以最强烈的措辞来反对这种做法:“源服务器不应将多个Set-Cookie头字段折叠成单个头字段。” - Lawrence Dol
我最近遇到了一个服务器,它确实折叠了Set-Cookie头,所以这绝对是一件在野外出现的事情。 - Jason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接