local.test.com
和之间有什么区别.local.test.com
?屏幕截图来自Chrome。
local.test.com
和之间有什么区别.local.test.com
?屏幕截图来自Chrome。
Answers:
local.test.com
将用于域,同时.local.test.com
也将用于子域。
local.test.com
将不适用于x.local.test.com
,但同时.local.test.com
适用于local.test.com
和x.local.test.com
?
前导点表示Cookie也对子域有效;但是,最近的HTTP规范(RFC 6265)更改了此规则,因此现代浏览器不应在意前导点。实施不推荐使用的RFC 2109的旧浏览器可能需要该点。
例如,如果“域”属性的值为“ example.com”,则在向example.com,www.example.com和www.corp.example发出HTTP请求时,用户代理会将cookie包含在Cookie标头中。 com。(请注意,即使不允许该字符,也会忽略前导%x2E(“。”)(如果存在),但如果存在尾随%x2E(“。”),则会导致用户代理忽略该属性。 )
摘自文章Cookie域的权威指南,以及为什么www-prefix使您的网站更安全的原因:
结论
尽管定义有些不同,但我们可以将这些实现简化为:
其他有价值的观察:
当Cookie中未设置任何域时,该Cookie应该仅与请求的确切主机名匹配。[注意:这与返回带有无点域的Set-Cookie有所不同!]没有子域,没有部分匹配。这意味着根本不包括domain属性-设置空的domain属性无效。不幸的是,Internet Explorer似乎将此与所有子域一起当作主机名。
在Cookie中设置域名时,安全的选择是在域名前加点号,例如.erik.io。Cookie将与所有子域匹配。
在RFC 2109实现中,设置没有erik.io之类的没有前一个点的cookie域在RFC 2109实现中是无效的,并且将产生与其他实现中的前一个点相同的行为。在没有包含子域的情况下,无法将Cookie限制为特定的显式设置域。
在所有RFC中,按照正常匹配,指定的cookie域必须与当前主机名匹配。在erik.io的响应中为www.erik.io设置cookie是无效的,因为域名为www.erik.io的cookie与erik.io不匹配,前者更为具体。
在RFC 6265中,在解析Set-Cookie标头时,域明确地小写。
Chrome浏览器使用“ Domain = local.test.com”集(或相同的“ Domain = .local.test.com”集)查看Cookie的方式就是“ .local.test.com”中的前导点。
不带“ Domain = something”的Set-Cookie定义查看没有前导点的域(= host)。
因此,chrome中的前导点不反映服务器是否使用了前导点,而是反映该cookie是否在服务器中定义为“ Domain = something”。(如果有的话,Cookie也将发送到子域)。
至少这是我的测试所显示的。Chrome浏览器应使其更易于阅读,例如查看定义cookie的确切字符串以及接收cookie的时间。