是的,我知道你在想什么——又一个 CORS 问题,但这一次我被难住了。
首先,实际的错误消息:
XMLHttpRequest 无法加载 http://localhost/Foo.API/token。这
响应中“Access-Control-Allow-Origin”标头的值必须
请求时不能是通配符“*”凭证模式是
'包括'。因此不允许来源“http://localhost:5000”
使用权。发起请求的凭证模式
XMLHttpRequest 由 withCredentials 属性控制。
我不确定是什么意思凭证模式为“包含”?
所以当我在邮递员中执行请求时,我经历了no这样的错误:
但是当我通过 angularjs Web 应用程序访问相同的请求时,我被这个错误难住了。这是我的 angualrjs 请求/响应。正如你将看到的响应是OK 200
,但我仍然收到 CORS 错误:
Fiddler 请求和响应:
下图演示了Web前端对API的请求和响应
因此,根据我在网上阅读的所有其他帖子,seems就像我在做正确的事情一样,这就是为什么我无法理解这个错误。最后,这是我在 angualrjs (登录工厂)中使用的代码:
API 中的 CORS 实现 - 参考目的:
使用方法1:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
EnableCrossSiteRequests(config);
}
private static void EnableCrossSiteRequests(HttpConfiguration config)
{
var cors = new EnableCorsAttribute("*", "*", "*")
{
SupportsCredentials = true
};
config.EnableCors(cors);
}
}
使用方法2:
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
ConfigureOAuth(app);
WebApiConfig.Register(config);
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseWebApi(config);
}
该问题源于您的 Angular 代码:
When withCredentials
设置为 true 时,它会尝试随请求一起发送凭据或 cookie。由于这意味着另一个源可能正在尝试执行经过身份验证的请求,因此不允许使用通配符(“*”)作为“Access-Control-Allow-Origin”标头。
您必须在“Access-Control-Allow-Origin”标头中明确响应发出请求的源才能使此工作正常进行。
我建议将您希望允许发出经过身份验证的请求的来源明确列入白名单,因为只需响应请求中的来源就意味着如果用户碰巧有有效的会话,任何给定的网站都可以对您的后端进行经过身份验证的调用。
我在中解释了这个东西本文我不久前写过。
所以你可以设置withCredentials
虚假或实施来源白名单,并在涉及凭据时使用有效来源响应 CORS 请求
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)