之前讲到了解决跨域的两种方式:JSONP 和 CORS ,都是需要在被调用方来修改代码解决的。
我们还可以通过代理方式,在调用方来解决跨域问题。
代理解决跨域问题
代理解决跨域问题的思路是:让发送出去的请求代理成是本域的 。
举个例子:
192.168.10.1:8080 是调用方
192.168.10.2:8080 是被调用方
它俩是不同域的,但我们可以在 nginx 或 Apache 上进行配置代理:将被调用方 192.168.10.2:8080 射成别的路径。
http {
server {
listen 80;
location /{
proxy_pass http://192.168.10.1:8080;
}
location /test{
proxy_pass http://192.168.10.2:8080;
}
}
}
比如上面,nginx 运行在 192.168.10.1 上,nginx 将 192.168.10.2:8080 端口的映射成了 test ,当调用方访问 test 路径时,这样的方法在外部看起来就不像是跨域了,像是访问本地(http://192.168.10.1:8080),但实际访问别的域(http://192.168.10.2:8080)。
总结
以上就是解决跨域的三种方式:JSONP 、 CORS 、代理。
最简单的是通过 Spring 的注解就可以解决跨域的问题了,JSONP 的方式已经是很少用的了,因为存在一定的弊端。当我们无法改动被调用方代码时,可以使用代理解决跨域问题。