我有一个与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
的离子应用程序。在浏览器中,一切正常,我可以适当地发出GET
和POST
请求。
但是在仿真器中(当我使用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
成功完成。只是在模拟器中它们会失败。
答案 0 :(得分:1)
CORS
,我希望这可以对某人有所帮助:
*
标头的显然通配符(Acccess-Control-Allow-Headers
)值仅在2016年5月(reference1,reference2)接受,因此某些浏览器可能仍不支持它。因此,更改为:
Access-Control-Allow-Headers: *
到
Access-Control-Allow-Headers: Content-Type, X-Auth-Token
(基本上,是我的应用程序使用的标头的确切值),我能够解决此问题。显然,我在台式机上使用的浏览器支持通配符头值,但模拟器和设备的浏览器不支持。绝对不是设备与模拟器的问题,而是浏览器与浏览器的问题。