【问题标题】:CORS Hell in Ionic 3Ionic 3 中的 CORS 地狱
【发布时间】:2018-07-19 21:49:10
【问题描述】:

我有一个 Ionic 应用程序与之通信的后端服务器(Spring Boot,由 nginx 代理)。对于每个请求,它都会发送以下标头:access-control-request-headers: *access-control-allow-headers: *access-control-allow-origin: *access-control-allow-methods: GET, POST, PUT, HEAD, OPTIONS, DELETE, PATCH。没有例外。

它还允许OPTIONS 请求并为每个请求返回 HTTP 200。

现在,我有一个使用 @angular/common/http 的离子应用程序。在浏览器中,一切正常,我可以优雅地发出GETPOST 请求。

但在模拟器中(当我使用ionic cordova emulate ios 运行时,我只能发出GET 请求,POSTs 失败并显示以下内容:

{"headers":{"normalizedNames":{},"lazyUpdate":null,"headers":{}},"status":0,"statusText":"Unknown Error","url":null,"ok":false,"name":"HttpErrorResponse","message":"Http failure response for (unknown url): 0 Unknown Error","error":{"isTrusted":true}}

如您所见,上面写着status: 0。这是指CORS 问题,但我不知道如何进一步调试。

我的请求都通过 Postman 成功,甚至使用 curl。只有在模拟器中才会失败。

【问题讨论】:

  • @HikmatGurbanli 不是。你甚至敢于阅读和比较这些问题吗?我无法使用代理,因为我正准备部署我的应用程序。而且所提到问题中的每一步都已经失败了。
  • 这是一个老歌,但很好:blog.ionicframework.com/handling-cors-issues-in-ionic。这表明在设备上运行时没有来源,因此 CORS 不应该发挥作用。你能确认在模拟器中运行时没有 OPTIONS 请求吗?你试过物理设备吗?
  • @BRass 谢谢,我很清楚那个页面。正如我所说,我不能使用代理,如博客所述。我要部署。我可以提出GET 请求,问题仅在于POSTS。您提供的链接指的是一般问题,我已经采取了所有提到的步骤。不过,只有GETs 有效。再次感谢。
  • 除了文本的长度似乎相同,浏览器上没有服务器问题,但模拟器上没有。你还没有提到你是否尝试过

标签: javascript typescript ionic-framework cors ionic3


【解决方案1】:

CORS 再次,我希望这可能对某人有所帮助:

显然,Acccess-Control-Allow-Headers 标头的通配符(*)值仅在 2016 年 5 月被接受(reference1reference2),因此某些浏览器可能仍然不支持它。所以,从:

Access-Control-Allow-Headers: *

Access-Control-Allow-Headers: Content-Type, X-Auth-Token

(基本上,我的应用程序使用的标头的确切值),我能够解决这个问题。显然,我在桌面上使用的浏览器支持通配符标头值,但模拟器和设备的浏览器不支持。绝对不是设备与模拟器的问题,而是浏览器与浏览器的问题。

【讨论】:

  • 任何来到这里的人也应该注意到Access-Control-Expose-Headers 标头也是如此。
猜你喜欢
  • 1970-01-01
  • 2018-07-15
  • 2018-02-09
  • 2018-03-28
  • 2014-12-01
  • 2019-06-24
  • 2018-07-18
  • 2017-11-11
  • 1970-01-01
相关资源
最近更新 更多