我有一个问题,获得跨源资源共享与cookie。这是我的设置:
客户端:
$.ajax({
type: 'POST',
url: '/processReq',
data: params,
xhrFields: {withCredentials:true},
crossDomain: true,
success: ...
});我已经在浏览器中调试了客户机,并验证了XMLHttpRequest.withCredentials实际上是正确的。
服务器:
我正在设置以下标题:
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Origin', '*');我的问题是,我无法将会话cookie存储在浏览器中,并在随后的请求中发送到服务器。
以下是浏览器中的响应头:
{
"server": "nginx/1.2.6",
"date": "Fri, 01 Feb 2013 23:46:07 GMT",
"content-type": "application/json; charset=utf-8",
"content-length": "306",
"connection": "keep-alive",
"x-powered-by": "Express",
"access-control-allow-credentials": "true",
"access-control-allow-origin": "*",
"set-cookie": [
"id=s%3Azm1m...NXe4Lkr9rLw; Domain=api.mydomain.io; Path=/; Expires=Sat, 01 Feb 2014 23:46:07 GMT; HttpOnly"
]
}每次测试时,我都不会将cookie发送到服务器。我是不是遗漏了什么?任何帮助都是非常感谢的。
发布于 2013-02-01 23:55:49
不能将('Access-Control-Allow-Origin', '*')与('Access-Control-Allow-Credentials', true)一起使用。您需要显式地将Access-Control-Allow-Origin设置为一个值。如果您仍然想要“*”行为,可以编程地将值设置为请求origin头。
来自control:
重要注意:当响应经过认证的请求时,服务器必须指定域,并且不能使用任意梳理。
发布于 2013-02-02 07:16:54
另一个优雅的选项是使用隐藏的iframe和window.postMessage。
postMessage API让两个浏览器框架跨域通信。基本设计如下:
domain-1.com上加载主页domain-2.com加载隐藏的iframedomain-2.com API的接口中当主页希望跨域对话时,它通过隐藏的iframe代理请求。没有CORS需要处理-没有!
一些教程:
https://stackoverflow.com/questions/14657002
复制相似问题