首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让CORS与JQuery客户端Node / Express服务器协同工作的问题

让CORS与JQuery客户端Node / Express服务器协同工作的问题
EN

Stack Overflow用户
提问于 2013-02-01 23:50:46
回答 2查看 633关注 0票数 1

我有一个问题,获得跨源资源共享与cookie。这是我的设置:

客户端:

代码语言:javascript
复制
    $.ajax({
        type: 'POST',
        url: '/processReq',
        data: params,
        xhrFields: {withCredentials:true},
        crossDomain: true,
        success: ...
    });

我已经在浏览器中调试了客户机,并验证了XMLHttpRequest.withCredentials实际上是正确的。

服务器:

我正在设置以下标题:

代码语言:javascript
复制
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Origin', '*');

我的问题是,我无法将会话cookie存储在浏览器中,并在随后的请求中发送到服务器。

以下是浏览器中的响应头:

代码语言:javascript
复制
{
    "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发送到服务器。我是不是遗漏了什么?任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

发布于 2013-02-01 23:55:49

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

来自control

重要注意:当响应经过认证的请求时,服务器必须指定域,并且不能使用任意梳理。

票数 1
EN

Stack Overflow用户

发布于 2013-02-02 07:16:54

另一个优雅的选项是使用隐藏的iframe和window.postMessage

postMessage API让两个浏览器框架跨域通信。基本设计如下:

  1. domain-1.com上加载主页
  2. 主页从domain-2.com加载隐藏的iframe
  3. 隐藏的iframe将javascript加载到与domain-2.com API的接口中

当主页希望跨域对话时,它通过隐藏的iframe代理请求。没有CORS需要处理-没有!

一些教程:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14657002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档