获得CORS与JQuery客户端,Node / Express服务器一起工作的问题

我有一个问题得到跨来源资源共享与cookie的工作。 这是我的设置:

客户:

$.ajax({ type: 'POST', url: '/processReq', data: params, xhrFields: {withCredentials:true}, crossDomain: true, success: ... }); 

我已经在浏览器中debugging了客户端,并且已经证实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" ] } 

每次我testing,我都没有得到一个cookie发送到服务器。 我错过了什么吗? 任何帮助深表感谢。

('Access-Control-Allow-Credentials', true)不能使用('Access-Control-Allow-Origin', '*') ('Access-Control-Allow-Credentials', true) 。 您需要明确地将Access-Control-Allow-Origin为一个值。 如果您仍然需要“*”行为,请以编程方式将值设置为请求origin

https://developer.mozilla.org/zh-CN/docs/HTTP/Access_control_CORS?redirectlocale=zh-CN&redirectslug=HTTP_access_control

重要注意事项:当响应有证书请求时,服务器必须指定一个域,并且不能使用通配。

旁边CORS的另一个优雅的select是使用一个隐藏的iframe和window.postMessage

postMessage API让两个浏览器框架跨域交stream。 基本devise如下:

  1. 加载domain-1.com上的domain-1.com
  2. 主页面加载来自domain-2.com隐藏的iframe
  3. 隐藏的iframe加载javascript来与domain-2.com API接口

任何时候主页希望跨域交谈,它通过隐藏的iframe代理请求。 没有CORS来处理 – 没有!

几个教程: