首页 文章

快递 - 可以't send redirect, Response to preflight request doesn' t通过访问控制检查

提问于
浏览
2

尝试将用户重定向到登录页面时,我总是收到此错误:

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

在我的快递申请中,我已经实现了CORS:

var corsOptions = {
  origin:  'http://localhost:4200',
  credentials: true
}

app.use(cors(corsOptions));

然后我尝试重定向用户:

router.use(function(req,res,next){
    if((req.session.user == null){
        res.redirect('http://localhost:4200' + '/login')
    }
    else
        next();
});

在Angular 4上我用{withCredentials:true}发送所有请求,因为我正在使用cookie;

这些是请求/响应标头:

响应:

Access-Control-Allow-Credentials:true Access-Control-Allow-Origin:http:// localhost:4200 Connection:keep-alive日期:2017年8月10日星期四12:09:55 GMT位置:http:// localhost :4200 / login set-cookie:semanaintegrada.session = s%3A6nieAv1pfn2V-2x7H4HbnqJFbYsgJmwy.hO1QKm%2Fgm6Kmso8pLCQ5zrZAVNhIYgfr%2BgzOB0oI9UA;路径= /; Expires =星期四,2017年8月10日13:09:55 GMT Transfer-Encoding:chunked Vary:Origin X-Powered-By:Express

请求:

接受:application / json,text / plain,/ Accept-Encoding:gzip,deflate,br Accept-Language:pt-BR,pt; q = 0.8,en-US; q = 0.6,en; q = 0.4 Cache-控制:无缓存连接:keep-alive内容长度:39内容类型:application / json Cookie:semanaintegrada.session = s%3AwuiVwYs3Ahs4dfLULfpqMBcrnbthY7sZ.OYZk%2FCnZGHAe8v1T8nWpbAdFQVsXjUFAQxnYI27%2FZlE主机:localhost:3000原产地:http:// localhost: 4200 Pragma:no-cache Referer:http:// localhost:4200 / User-Agent:Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML,类似Gecko)Chrome / 60.0.3112.90 Safari / 537.36

此外,在Chrome中有4个请求被创建(我不知道为什么) . 3到我的快递app和1到localhost:4200最后一个有Access-Control-Allow-Origin:*和Origin null这可能是相关的吗?

1 回答

  • 1

    "credentials flag" 是指正在进行的请求的 XMLHttpRequest.withCredentials ,而不是Access-Control-Allow-Credentials标头 .

    如果请求的 withCredentialstrue ,则无法使用 Access-Control-Allow-Origin: * ,即使没有 Access-Control-Allow-Credentials header.

相关问题