欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Nginx处理跨域问题

时间:2023-07-28

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

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。