如何通过CORS传递cookie?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过CORS传递cookie?相关的知识,希望对你有一定的参考价值。

我有一个使用Axios从客户端发送HTTP请求的项目

axios.create({
    baseURL: `http://localhost:8081/`,
    withCredentials: true
  })

而且我想这允许cookie-我确定它会在您请求之前显示在浏览器中-与请求一起发送。

当日志中显示此错误时,该问题发生在后端:

对预检请求的响应未通过访问控制检查:响应中“ Access-Control-Allow-Origin”标头的值必须当请求的凭据模式为时,不是通配符“ *”'包括'。因此,不允许原点“ http://localhost:8080”访问。发起的请求的凭据模式XMLHttpRequest由withCredentials属性控制。

我尝试过:

app.use(cors({
  //origin : to be set later
  credentials: true,
}))

而这是:

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
  res.header("Access-Control-Allow-Credentials", true);
  next();
});

但似乎都不起作用。

任何帮助将不胜感激。

编辑1: 我正在使用cookie解析器,我很确定它将cookie附加到要求中。

我的app.js文件没有其他可能导致此类问题的中间件,除了CORS和Cookie解析器。

编辑2:根据要求,我调用了此命令:

curl -v -X选项http://localhost:8081

这就是结果:

Rebuilt URL to: http://localhost:8081/
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8081 (#0)
> OPTIONS / HTTP/1.1
> Host: localhost:8081
> User-Agent: curl/7.47.0
> Accept: */*
>  < HTTP/1.1 204 No Content < X-Powered-By: Express < Access-Control-Allow-Origin: * < Access-Control-Allow-Methods: GET,HEAD,PUT,PATCH,POST,DELETE < Vary: Access-Control-Request-Headers < Content-Length: 0 < Date: Sun, 02 Sep 2018 23:31:11 GMT < Connection: keep-alive
答案

我知道对OP来说为时已晚,但对于那些一直来这里的人-帮助我的是:

app.use(cors({
  preflightContinue: true,
  credentials: true,
}));

来源:https://expressjs.com/en/resources/middleware/cors.html

以上是关于如何通过CORS传递cookie?的主要内容,如果未能解决你的问题,请参考以下文章

如何跨域传递 cookie

SignalR Cors Cookie 未发送

如何通过代码设置片段标签?

CSRF 跨域

Firefox 未设置通过 XHR CORS 请求接收的 Cookie

Safari 不使用 JS Fetch API 设置 CORS cookie