Cookies cookie域中的点前缀是什么意思?

Cookies cookie域中的点前缀是什么意思?,cookies,Cookies,local.test.com和.local.test.com之间有什么区别?屏幕截图来自Chrome。local.test.com将用于域,而.local.test.com也将用于子域。前导点表示cookie也对子域有效;尽管如此,最近的HTTP规范(RFC6265)改变了这一规则,因此现代浏览器不应该关心前导点。实现不推荐使用的RFC 2109的旧浏览器可能需要dot 例如,如果域属性的值为“example.com”,则当向example.com、www.example.com和www.co


local.test.com
.local.test.com
之间有什么区别?屏幕截图来自Chrome。

local.test.com
将用于域,而
.local.test.com
也将用于子域。

前导点表示cookie也对子域有效;尽管如此,最近的HTTP规范(RFC6265)改变了这一规则,因此现代浏览器不应该关心前导点。实现不推荐使用的RFC 2109的旧浏览器可能需要dot

例如,如果域属性的值为“example.com”,则当向example.com、www.example.com和www.corp.example.com发出HTTP请求时,用户代理将在cookie头中包含cookie。(请注意,即使不允许使用前导的%x2E(“.”)字符,也会忽略该字符(如果存在),但尾随的%x2E(“.”)将导致用户代理忽略该属性。)

从文章中:

结论 虽然定义有些不同,但我们可以简化它 对于任何一种实施,如下所示:

  • 当cookie中未设置域时,cookie应仅与 请求的确切主机名。[注意:这不同于返回一个没有点的域的集Cookie!]没有子域,没有部分匹配。 这意味着不包括domain属性–它无效 设置空域属性。不幸的是,Internet Explorer 似乎将其与任何子域一起视为主机名

  • 在cookie中设置域时,安全的选择是将其置于前面 一点一点,像埃里克·伊奥。cookie将与所有子域匹配。

  • 设置一个没有前面的点的cookie域(如erik.io)是不正确的 在RFC2109实现中无效,并将生成相同的 与其他实现上的点相同的行为。有 无法将cookie限制为特定的显式设置域, 不包括子域

其他值得注意的意见:
  • 在所有RFC中,指定的cookie域必须与当前主机匹配 名称,按正常匹配。在中为www.erik.io设置cookie 来自erik.io的响应无效,因为cookie包含域 www.erik.io与erik.io不匹配,前者更具体

  • 在RFC6265中,在解析 设置Cookie头

“.local.test.com”中最重要的一点就是chrome如何查看设置为“Domain=local.test.com”的Cookie(或“Domain=.local.test.com”,两者相同)

不带“Domain=something”的Set Cookie定义查看不带前导点的域(=主机)

因此,chrome中的前导点并不反映服务器是否使用了前导点,而是反映了cookie在服务器定义中是否有“Domain=something”。(如果有,cookie也将被发送到子域)


至少我的测试显示了这一点。Chrome应该使这更容易阅读,例如查看定义cookie的确切字符串以及收到cookie的时间。

在2016年9月26日16:44用户2864740的评论中,链接已失效,显然erik.io域已传递给另一个用户或域注册器。因此
local.test.com
将不适用于
x.local.test.com
,但是
.local.test.com
同时适用于
local.test.com
x.local.test.com
?我认为这是错误的。Cookie与任何和所有下游子域共享,无论有无点。您可以将子域视为从其父域“继承”cookie。因此,在example.com上设置cookie会在blog.example.com和my.blog.example.com上设置cookie。在blog.example.com上设置cookie会将其设置在this.is.my.blog.example.com以及其间的每个子域上。但是,就像继承一样,情况并非如此。在blog.example.com上设置cookie不会在example.com上设置cookie。也就是说,您可以通过根本不设置cookie的域(或设置为空字符串)将cookie限制为仅限于主机。奇怪的是,这将只为主机(example.com)而不是其任何子域设置cookie。cookie将被发送到指定域的任何子域,带或不带前导点。实际上,控制是否将其传递给子域的是您是否在cookie上设置域。如果您根本没有设置域,那么cookie将只发送到发布它的确切域。它永远不会发送到不太特定的父域(例如,“local.test.com”不会包含在“test.com”的请求中),并且只有在您设置域值时,它才会发送到匹配的子域。@Triynko,当您绑定更新cookie时,点会起作用。我还没有成功地分离出所有的规则,但我看到结果会根据前导点的存在与否而有所不同,而且它不是直接的。它的工作原理因浏览器而异,并不完全是直观的。控制cookiename在浏览器上是否有前导点并不是我做过的最简单的编程任务。RFC日期为2011年4月。IE8和IE9最初都是在那个日期之前发布的,遗憾的是,现在仍然在使用。所以我最好的猜测(没有尝试)是他们需要前导点。有人知道有多少浏览器仍然在旧的RFC上运行吗?建议在希望包含子域时使用前导点以实现最佳兼容性。这种兼容性要求只会继续降低。(6255不需要,但需要,最终结果与2109相同。)