xx项目有个需求,我们的web项目首页需要展示“实时天气”,但提供天气数据的接口是来自业主那边的一个独立项目,且部署在其他服务器上。
现场环境项目地址:http://10.5.11.19:8089/AVMS
天气服务接口地址:http://10.5.15.8:8080/dam/service/weather?token=QdSEhR2d&appKey=ff808081783a60d001785da57230003d&endtime=202106221614
如果我们在前端直接发ajax请求调用接口,浏览器就会限制跨域访问,导致我们调用不了接口。
跨域问题正常来说都是提供接口的服务端把跨域相关的配置处理好(设置请求头允许跨域访问),别人跨域调用接口时就不会被浏览器拦截。
但由于接口提供者是业主方,让他们改他们不改也没办法,所以只能由我们自己想办法处理跨域问题,网上查了资料,发现有2个比较简单的方案
方案1:Jsonp解决ajax跨域问题
Jsonp具体实现方式和原理百度上有,代码上看其实就是换了一种发ajax请求的方式,简单便捷、干净卫生。
*这个方法亲测可以解决跨域问题,但是在接口需要的参数超过2个的时候,这个方法就不管用了(比如调用天气服务的接口,需要带多个参数),具体原因不清楚没百度到,所以只有考虑其他方案
方案2:使用Nginx做代理(这种方法并不是处理跨域问题的最优解,加了一个组件会增加以后的维护成本)
概括下就是我们项目访问接口时,ip端口写Nginx服务的10.5.11.19:80(这儿需要配置Nginx允许跨域,否则访问Nginx也会有跨域问题)
然后Nginx代替你访问天气服务接口的原ip端口10.5.15.8:8080,然后将返回值返回给你
这里就直接帖配置文件了
Nginx配置好之后,我们在代码里的ajax请求url,就改为下面这样即可
http://10.5.11.19/weather/service/weather?token=token&appKey=ff808081783a60d001785da57230003d&location=WW0GEYRDT0F3