2015-05-13 148 views
2

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

例如,事实是,一台服务器(比如,foo.example.com)不能设置cookies其兄弟姐妹(比如,bar.example.com)或域名比它低(也称“其子”说,ide.foo.example.com)但它可以为域名设置更高的cookie(也称为“其父母”,在这种情况下为example.com

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

我从Udacity网络开发课程了解了关于cookies的所有内容。但我真的很困惑这个问题。任何人都可以帮忙解释一下吗?提前致谢。 :-)

回答

0

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

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

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

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

恰巧“appspot.com”也是一个公共后缀;所以“foo.appspot.com”无法设置domain =“appspot.com”的cookie。 (它可以,但浏览器会拒绝它)

不幸的是,没有算法来确定哪个是公共后缀。所有公共后缀的列表在https://publicsuffix.org/

相关问题