javascript - Ionic 3 中的 CORS 地狱
问题描述
我有一个 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
. 只有在模拟器中他们才会失败。
解决方案
CORS
再次,我希望这可以帮助某人:
显然,标头的通配符(*
)值Acccess-Control-Allow-Headers
仅在 2016 年 5 月(reference1、reference2)被接受,因此某些浏览器可能仍然不支持它。所以,从改变:
Access-Control-Allow-Headers: *
至
Access-Control-Allow-Headers: Content-Type, X-Auth-Token
(基本上,我的应用程序使用的标头的确切值),我能够解决这个问题。显然,我在桌面上使用的浏览器支持通配符标头值,但模拟器和设备的浏览器不支持。绝对不是设备与模拟器的问题,而是浏览器与浏览器的问题。
推荐阅读
- css - 添加自定义背景图像时,标题幻灯片文本格式不适用
- javascript - 浏览 html 表格
- elasticsearch - ElasticSearch 查询大小限制?
- php - 显示为 WooCommerce 产品设置的所有产品属性的简码
- css - 在表响应表的@click事件上更改css类
- php - php搜索查询仅显示确切结果
- git - 为什么当我回到 GIT 中的上一个分支时文件夹没有被删除
- java - 如何解决 pom 类型的 Maven 依赖项?
- jquery - 是否可以使用 jquery 插入 VueJs 组件?
- javascript - 如何从 Firestore 中检索数组并将其输出到 HTML 表中