CORS 访问控制允许源错误仅在 Safari 上



我们有一个调用.net core restful api项目的Angular应用程序。还有一个单独的身份验证应用程序(Identity Server4)来处理登录。

这只发生在 Safari 上,所有其他浏览器都可以正常工作。

Safari 中的确切错误是Origin https://my.site.com is not allowed by Access-Control-Allow-Origin.

但是在我的回复中,我发送了以下 Cors 标头

Access-Control-Allow-Origin: https://my.site.com
Access-Control-Allow-Credentials: true

除了 CORS 错误之外,我在 Safari 中调用 API 时没有得到任何响应,所以我相信这绝对是与浏览器相关的问题。我不得不从Chrome上获取标题,看看有什么回来的。

但是,Safari 中的 OPTIONS 调用有效,我可以在 Safari 中的响应中看到正确的标头。

我也试过Access-Control-Allow-Origin: *,Safari也失败了。

我认为这可能是 Safari 中的第 3 方 cookie 设置,因为我们的登录服务器位于设置身份验证 cookie 的不同子域上,但不确定如何检查这是否真的是问题所在。我们的 API 也在另一个子域上,它是对 api 的调用,无法从角度应用程序工作。

我不知道接下来该尝试什么。

Safari 在模块脚本上需要 crossorigin 属性,因此解决方案是在 angular.json 文件中使用 "crossOrigin" 选项:

"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"crossOrigin": "anonymous", // <-- The place where you should add/set the option
//... other options

所以问题毕竟不是COR的问题。由于 api 返回内部服务器错误 (500),因此 CORs 标头未添加到响应中,而不是像其他浏览器一样告诉我原因是内部服务器错误,Safari 忘记提及该部分,只显示 COR 错误(我正在测试的功能特定于 Safari 和 iPhone,如果您想知道为什么它没有在其他浏览器测试中被拾取)。

最新更新