【发布时间】:2026-01-25 16:10:01
【问题描述】:
我有一个项目使用 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();
});
但似乎都不起作用。
编辑 - 这是未来访问者的答案
在 cmets 参与者的帮助下,我发现我必须设置原点值:
app.use(cors({
origin : "http://localhost:8080",
credentials: true,
}))
【问题讨论】:
-
Access-Control-Allow-Origin必须是主机名,而不是*发送 cookie 时。 -
响应中
Access-Control-Allow-Origin的确切值是多少? -
我们需要查看来自服务器的响应头。致电:
curl -v -X OPTIONS http://localhost:8081并回复您的问题 -
Access-Control-Allow-Origin: *所以,正如我在 20 分钟前提到的,您必须传递一个主机名,而不是那里的*。这也是错误消息准确告诉您的内容。 -
@zerkms 是的,你是对的,我必须将其更改为主机名,并保留凭据选项,并且它可以工作。非常感谢你们。
标签: node.js express cors axios