【发布时间】:2014-05-28 11:19:01
【问题描述】:
浏览器不允许我这样做:
1) 加载http://localhost:8080/myapp/page1
-> 这会将 JSESSIONID cookie 设置为 path=/myapp 和 domain=localhost
2) 通过 AJAX 请求,我调用 GET http://localhost:3000/login?user=xxx
-> 在 Chrome 和 Firebug 的响应中,我看到: Set-Cookie: connect.sid=XXXXXXYYYYYY Path=/ domain=localhost
我期待当我执行另一个 ajax 调用时,例如http://localhost:3000/anotherCall(仍留在http://localhost:8080/myapp/page1),浏览器会在标头中发送 Cookie connect.sid。但是,它没有!
知道为什么吗?两个 cookie 属于同一个域,唯一的区别是路径,所以不应该有任何跨域问题。
另外,我尝试在 NodeJs 响应中设置此标头。结果相同:
res.header('Access-Control-Allow-Origin', "*");
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Cookie, Content-Type, Authorization, Content-Length, X-Requested-With');
res.header('Access-Control-Expose-Headers', 'Set-Cookie, X-Powered-By');
从 Firebug 和 Chrome 开发工具检查 Cookie 信息,似乎浏览器根本没有存储 connect.sid cookie。我想知道是否假设域不同(一个是 localhost:8080,另一个是 localhost:3000...)
【问题讨论】:
标签: javascript ajax node.js cookies cross-domain