离子3中的CORS地狱

时间:2018-07-19 11:52:27

标签: javascript typescript ionic-framework cors ionic3

我有一个与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个请求,POST失败并显示以下内容:

{"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成功完成。只是在模拟器中它们会失败。

1 个答案:

答案 0 :(得分:1)

再次

CORS,我希望这可以对某人有所帮助:

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

Access-Control-Allow-Headers: *

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

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