nginx实现网关解决跨域问题(大型网关接口系统)

跨域问题:不同网站之间的请求连接,比如两台服务器之间

1	http://www.a.com/a.js
        http://www.a.com/b.js               同一域名下	允许
2	http://www.a.com/a/a.js
        http://www.a.com/b/b.js            同一域名不同文件夹	允许
3	http://www.a.com:8080/a.js
        http://www.a.com:9090/a.js        同一域名不同端口号	不允许
4	http://www.a.com/a.js
        https://www.a.com/b.js             同一域名不同协议	不允许
5      http://www.a.com/a.js
        http://192.168.4.158/b.js            域名与域名对应的ip地址	不允许
6	http://www.a.com/a.js
        http://wwww.a.com/b.js            主域名相同,子域名不同	不允许
7	http://www.a.com/a.js
        http://www.b.com/b.js                不同域名	不允许

解决方案 ①ajax的jsoup 可以利用ajax的jsoup解决跨域问题,但是只能是get请求,而且大型公司都不这么用

基本上都是利用nginx网关代理实现跨域问题

项目中调用别人的接口,出现了跨域问题,利用ajax跨域问题,利用了jsoup进行获取,但是只能是get请求,后来用网关系统

②XHR2(修改请求头) “XHR2” 全称 “XMLHttpRequest Level2” 是HTML5提供的方法,对跨域访问提供了很好的支持,并且还有一些新的功能。修改了请求头,不安全,不推荐

  • IE10以下的版本都不支持

  • 只需要在服务器端头部加上下面两句代码:

header( "Access-Control-Allow-Origin:*" );
header( "Access-Control-Allow-Methods:POST,GET" );

③使用后台服务转发 非常占宽带,不介意使用,所有服务都放到本站,所有请求都通过http转发。

比如说将A系统中的服务地址封装在B项目中的一个方法中利用HTTPClient去访问

实际就是B项目访问自己内部的一个地址,内部通过HttpClient去访问,安全,不会暴露接口,但是耗资源,会发生两次请求

④使用nginx搭建网关服务(推荐)

nginx.conf 新建两个location location /A http://a.a.com:81/A location /B http://b.b.com:81/B

这两个server之间访问是会出现跨域的问题。

server {
        listen       80;
        server_name  www.liaoxiang.com;
        location /A {
            proxy_pass  http://a.a.com:81/A;
            index  index.html index.htm;
        }
        location /B {
            proxy_pass  http://b.b.com:81/B;
            index  index.html index.htm;
        }
    }

http://www.liaoxiang.com/A/* A项目的地址

http://www.liaoxiang.com/B B项目的地址

都是通过一个域名去访问,就不会出现跨域的问题

这里测试中,如果在 http://b.b.com:81/B

去调用http://a.a.com:81/A

中的数据时会出现跨域问题的

但是如果都被nginx代理,然后通过

www.liaoxiang.com

去访问的话,同一域名下就不会出现跨域的问题

这样就可以在

http://b.b.com:81/B

中去调用

http://a.a.com:81/A

中的页面或者数据

不换行的话这里全在一起,不好看,这样的话还可以,域名比较清晰,理解一下

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SoXiaTea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值