离子: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_ALL
和CORS_ALLOW_CREDENTIALS
设置为True
,将带有端口的IP地址添加到CORS_ORIGIN_WHITELIST
和CORS_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问题的主要内容,如果未能解决你的问题,请参考以下文章