ionic解决跨域访问

本文详细介绍了在 Ionic 开发过程中遇到的 CORS 问题及其原因,并提供了两种解决方案:通过 Angular Constant 配置代理服务器,以及使用 Gulp 自动转换地址。重点讲解了如何在 Ionic CLI 中设置代理服务器,以避免 CORS 预检请求,确保在本地开发和设备运行时能够正常访问外部 API。
摘要由CSDN通过智能技术生成

如果你通过 ionic serve 或者 ionic run 命令使用或 live reload 或者访问过外部 API 结点,那么你肯定遇到过 CORS 问题,譬如下面这样:

XMLHttpRequest cannot load http://api.ionic.com/endpoint.
No 'Access-Control-Allow-Origin' header is present on the requested resource.Origin 'http://localhost:8100' is therefore not allowed access.

那么问题来了,什么是 CORS 呢?又是什么导致了这个问题嘞?

什么是 CORS?

CORS=Cross origin resource sharing(跨域资源共享)

origin 就是你现在正在看的主站,你现在访问的是
http://ionicframework.com/blog/handling-cors-issues-in-ionic,那么 origin 就是ionicframework.com

如果说我们向 http://cors.api.com/api 发起一个 AJAX 请求,那么 host origin 会由被浏览器自动列入CORS请求的 Orgin header 指定好了,由于ionicframework.comapi.com 的主机并不匹配,所以在一个HTTP OPTIONS请求报头的 form 中我们所有从 ionicframework.com发起的访问服务器资源的请求必修得到服务器的授权。

假如上面的请求出现错误(不被服务器允许),那么我们是无法从服务器访问到(api.com上的)资源的。

让我们来看一下当你通过ionic serve, ionic run,ionic run -l来运行app的时候 origin 会是什么。

浏览器中的运行

当你运行 ionic serve 时发生了什么呢?

  • 启动了一个本地 web 服务器
  • 你的浏览器打开并定位到本地服务器地址

这让你看着你的应用加载到你电脑上一个浏览器里,地址是:http://localhost:8100(如果你选择了 localhost的话)。

你的 origin 就是localhost:8100
任何的发送到其他不是 localhost:8100主机上的 AJAX 请求都会把localhost:8100作为他的 origin,这就会导致必须要经过一个 CORS 预检来

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值