跨域问题:不同网站之间的请求连接,比如两台服务器之间
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 location /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; } }
A项目的地址
B项目的地址
都是通过一个域名去访问,就不会出现跨域的问题
这里测试中,如果在
去调用
中的数据时会出现跨域问题的
但是如果都被nginx代理,然后通过
www.liaoxiang.com
去访问的话,同一域名下就不会出现跨域的问题
这样就可以在
中去调用
中的页面或者数据
不换行的话这里全在一起,不好看,这样的话还可以,域名比较清晰,理解一下