【发布时间】:2015-03-24 20:54:46
【问题描述】:
我已经使用 firebug 手动创建了两个 cookie:
Cookie1=value1; expires=Sat, 29 Mar 2014 06:21:54 GMT; path=/Ex05Cookie; domain=localhost; HttpOnly
Cookie2=value2; expires=Sat, 29 Mar 2014 06:21:54 GMT; path=/Ex05Cookie; domain=localhost:8080; HttpOnly
唯一的区别是域属性,一个是localhost,另一个是端口号。
这是我尝试请求 http://localhost:8080/Ex05Cookie/ 时的 HTTP 标头:
GET /Ex05Cookie/ HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: Cookie1=value1
Connection: keep-alive
Cache-Control: max-age=0
标头仅包含域为localhost的Cookie1。
为什么我的 Firefox 不发送 Cookie2 而不是 Cookie1?
【问题讨论】:
-
我猜这是 HTTP 机制的“同域”问题,浏览器不会区分不同的路径和/或端口以在同一个域中使用不同的 cookie。
-
但这可能会导致问题,因为不同的服务器运行在不同的端口上,并且httpd服务器(80端口)创建的cookie不应该发送到Tomcat(8080端口)。
-
非常正确;我也想知道谁知道解决方法。
-
IDK 如果它会很有帮助,但是这篇博文有一些关于 cookie 及其域属性以及浏览器如何处理它们的信息:github.com/blog/1466-yummy-cookies-across-domains
-
这里对Are HTTP cookies port specific?这个问题进行了很好的讨论。实际上有两个方面:1)从浏览器到源服务器和2)从源服务器到浏览器。两者都在RFC6265中得到了很好的解释