【问题标题】:Why can foo.example.com set cookies for example.com?为什么 foo.example.com 可以为 example.com 设置 cookie?
【发布时间】:2015-07-24 03:21:53
【问题描述】:

从文档和this link 中,我已经知道事实是foo.example.com 可以通过在Set-Cookie 标头中发送带有Domain = example.com 的响应来为example.com 设置cookie。但是为什么允许这样做呢?

例如,事实是,服务器(例如,foo.example.com)无法为其兄弟(例如,bar.example.com)或低于它的域名(也称为“它的孩子”,例如, ide.foo.example.com),但它可以为比它更高的域名设置cookie(也称为“它的父母”,在本例中为example.com

让我把问题的陈述放到现实世界中来更清楚地说明问题。就像 Google App Engine 上的应用程序一样,foo.appspot.com 显然不能为bar.appspot.com 设置 cookie,因为它们是两个不同的应用程序,它们不应该影响彼此的行为。但是为什么允许foo.appspot.com 通过在响应头中发送Domain = appspot.com 来为appspot.com 设置cookie?通过这样做,foo.appspot.com 应用实际上可以影响其他应用在 Google App Engine 上的行为,因为浏览器会在访问 bar.appspot.com(其域名是 appspot.com 的子域名)时发送此 cookie。

我从 Udacity 的 Web 开发课程中学到了所有关于 cookie 的知识。但我真的对这个问题感到困惑。有人可以帮忙解释一下吗?提前致谢。 :-)

【问题讨论】:

    标签: http cookies


    【解决方案1】:

    您提供的链接已经过时了。太糟糕了,谷歌搜索“cookie域”的人会首先找到它。

    我应该写一个更好的;但是现在,要快速回答您的问题 - 它是关于“公共后缀”域的。

    服务器“example.com”可以为“com”设置cookie吗?不,因为“com”是公共后缀。

    “foo.co.uk”可以为“co.uk”设置cookie吗?不,因为“co.uk”是公共后缀。

    碰巧“appspot.com”也是一个公共后缀;所以“foo.appspot.com”不能设置域=“appspot.com”的cookie。 (可以,但浏览器会拒绝)

    很遗憾,没有算法可以确定哪个是公共后缀。所有公共后缀的列表在https://publicsuffix.org/手动维护

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-07
      • 1970-01-01
      • 2011-03-06
      • 2019-10-14
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多