离子:IOS模拟器有点奇怪的CORS问题

Posted

技术标签:

【中文标题】离子:IOS模拟器有点奇怪的CORS问题【英文标题】:Ionic: A bit Strange CORS issue with the IOS emulator 【发布时间】:2017-09-14 11:11:50 【问题描述】:

这是代码。

$http( method: 'GET', url: imageUrl );

我正在使用Ionic 框架。它在 web、andorid 移动和 android 模拟器中运行良好。

但是当我在 ios 9.3 模拟器(4.1.1) 中使用它时,我得到了错误XMLHttpRequest cannot load 'imageUrl'. Origin 'XXX' is not allowed by Access-Control-Allow-Origin.

我想我可以消除后端中任何可能的错误,因为它正在与其他 UI 框架一起使用。同样在后端(Django framework)我将CORS_ORIGIN_ALLOW_ALLCORS_ALLOW_CREDENTIALS设置为True,将带有端口的IP地址添加到CORS_ORIGIN_WHITELISTCORS_ALLOW_HEADERS中所需的标头(包括Access-Control-Allow-Origin)。

那么,有什么具体的事情需要做才能让这个错误在 IOS 模拟器/平台上消失吗?

【问题讨论】:

【参考方案1】:

当你运行时:

ionic cordova emulate ios -l -c -s

我的猜测是,你正在做什么,模拟器已启动并绑定到你的 Mac 的 IP 地址而不是“localhost”。这会导致您的接收端点在您的 get 请求的请求标头中看到您的 Mac 的 IP,因为这是一个与模拟器不同的地址,它会将您的请求视为跨域请求。

请尝试 Ionic 团队的以下指南:

Handling CORS issues in Ionic

简而言之:

    在您的 ionic.config.json 文件中设置代理:

    "name": "proxy-example", "app_id": "", "proxies": [ "path": "/api", "proxyUrl": "http://cors.api.com/api" ]

      使用实时重载服务器正在使用的端口将您的请求指向 localhost。你可以像这样在你的 emulate 命令中设置它:

    ionic cordova 模拟 ios -l -c -s --port 8080

【讨论】:

【参考方案2】:

CORS 问题应该在服务器上处理。如果您使用 Azure 来部署您的 Web Api 和 Azure 数据库服务,那么, 1. 打开仪表板。 2. 打开您的 Web API 应用服务。 3. 从菜单中选择 API 标题下的 CORS。 4. 允许来源 * Reference Image 并且不要忘记在 Azure SQL 服务器的防火墙设置中允许所有 IP [0.0.0.0 到 255.255.255.255] Reference Image 2

【讨论】:

以上是关于离子:IOS模拟器有点奇怪的CORS问题的主要内容,如果未能解决你的问题,请参考以下文章

Ionic2 离子输入在 iOS 模拟器上不起作用

离子不安装应用程序

仅在 iOS 移动 Safari 中上传图像时出现错误的 CORS 失败

IOS CORS问题离子1项目和android工作完美

离子 ios 应用程序无法访问互联网

离子转换仅在 ios 中获得白页