Express - 无法发送重定向,对预检请求的响应未通过访问控制检查
Posted
技术标签:
【中文标题】Express - 无法发送重定向,对预检请求的响应未通过访问控制检查【英文标题】:Express - Can't send redirect, Response to preflight request doesn't pass access control check 【发布时间】:2018-01-19 10:20:58 【问题描述】:尝试将用户重定向到登录页面时,我总是收到此错误:
对预检请求的响应未通过访问控制检查: 响应中“Access-Control-Allow-Origin”标头的值必须 当请求的凭据模式为时,不是通配符“*” '包括'。因此,Origin 'null' 不允许访问。这 XMLHttpRequest 发起的请求的凭证模式是 由 withCredentials 属性控制。
在我的 express 应用程序中,我已经实现了 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;
这些是请求/响应标头:
回复:
访问控制允许凭据:true 访问控制允许来源:http://localhost:4200 连接:保持活动日期:2017 年 8 月 10 日星期四 12:09:55 GMT 地点:http://localhost:4200/login 设置cookie:semanaintegrada.session=s%3A6nieAv1pfn2V-2x7H4HbnqJFbYsgJmwy.hO1QKm%2Fgm6Kmso8pLCQ5zrZAVNhIYgfr%2BgzOB0oI9UA; 路径=/;过期=2017 年 8 月 10 日星期四 13:09:55 GMT Transfer-Encoding:chunked Vary:Origin X-Powered-By:Express
请求:
Accept:application/json, text/plain, / Accept-Encoding:gzip, deflate, br 接受语言:pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4 缓存控制:无缓存连接:保持活动内容长度:39 内容类型:应用程序/json Cookie:semanaintegrada.session=s%3AwuiVwYs3Ahs4dfLULfpqMBcrnbthY7sZ.OYZk%2FCnZGHAe8v1T8nWpbAdFQVsXjUFAQxnYI27%2FZlE 主机:localhost:3000 来源:http://localhost:4200 Pragma:no-cache 引用者:http://localhost:4200/ User-Agent:Mozilla/5.0 (Windows NT 10.0; WIN64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/60.0.3112.90 Safari/537.36
此外,在 Chrome 中创建了 4 个请求(我不知道为什么)。 3 到我的快递应用 和 1 到 localhost:4200 最后一个有 Access-Control-Allow-Origin:* 和 Origin null 这有关系吗?
【问题讨论】:
【参考方案1】:“凭据标志” 指的是发出请求的 XMLHttpRequest.withCredentials,而不是 Access-Control-Allow-Credentials 标头。
如果请求的withCredentials为true,则Access-Control-Allow-Origin: *
不能使用,即使没有Access-Control-Allow-Credentials header.
【讨论】:
但是我仍然需要发送'withCredentials'参数,因为我需要在我的请求中使用cookies,我该怎么办?以上是关于Express - 无法发送重定向,对预检请求的响应未通过访问控制检查的主要内容,如果未能解决你的问题,请参考以下文章
从源 xxxx 访问 XMLHttpRequest ' 被 CORS 策略阻止:对预检的响应。预检请求不允许重定向
302 在 CORS 预检请求到 nodejs 服务器后重定向
ASP.NET Core Web API + Angular 对预检请求的响应未通过访问控制检查:预检请求不允许重定向