【发布时间】:2020-09-25 06:48:08
【问题描述】:
我刚刚将一个新的 Web 应用、API 和 DB 部署到 Azure。作为测试,我有大约六个人使用该应用程序。它为五个人工作,但一个人得到了这个 CORS 错误:
SEC7120:[CORS] 来源“https://mysite.azurewebsites.net”没有 在中找到“https://mysite.azurewebsites.net” 跨域资源的 Access-Control-Allow-Origin 响应标头 在'https://mysiteapi.azurewebsites.net/user'。
这怎么可能?架构是这样的:
浏览器 > Azure Web 应用 > Azure API > Azure DB
CORS 问题是 Azure Web App 和 Azure API 之间的问题,对吧?那么,当 Web 应用程序和每个用户的 API 之间没有任何变化时,一个人怎么会遇到这个问题呢?
在我的 .NET Core 3.0 API 中,我有这个
app.UseCors(options => options
.WithOrigins("http://localhost:4200", "https://localhost:4200", "https://mysite.azurewebsites.net")
.AllowAnyMethod()
.WithHeaders("Authorization", "Content-Type"));
我的网络应用程序这样调用 API:
const headers_object = new HttpHeaders().set("Authorization", "Bearer " + jwt);
this.http.get('user', { headers: headers_object, responseType: 'json' })
.subscribe((data: any) => {
this.userDto = data;
},
error => {
console.log('error: ', error);
});
那么它怎么可能表现得不同呢?为什么会这样?
【问题讨论】:
-
可能的原因包括:用户收到错误响应——5xx 或 4xx——在这种情况下,响应可能根本没有 Access-Control-Allow-Origin 响应标头;或者由于某种原因,用户根本没有收到响应——可能是因为他们有浏览器扩展程序或防病毒软件阻止了它。要进行故障排除,请考虑让用户查看浏览器 devtools 中的 Network 选项卡(最好在 Firefox 中,因为这会比在 Chrome 中显示更多信息)——查看响应的 HTTP 状态代码和完整的响应标头集。
-
谢谢。响应标头确实显示了相应站点的
Access-Control-Allow-Origin。另外,在 Startup.cs 中设置UseCors应该包含所有内容的响应标头,对吗?这对浏览器扩展或防病毒很有趣。我可以检查一下。 -
这可能与 [stackoverflow.com/a/49364050/5344880] 相关吗?从该链接中,我们可以推断您定义 URL 以允许 CORS 的方式也很重要。因此,访问带有 www 前缀和 不带 www 前缀的 URL 可能会导致不同的行为
-
这是个好主意,我可以看看这对我来说是否是个问题,但我认为不是。我在任何地方都使用 mysite.azurewebsites.net。而且我不确定这对一个用户来说是个什么问题。不过谢谢你的提示。
-
您可以将其发布为答案,以帮助遇到同样问题的其他人。
标签: c# angular azure .net-core cors