【经验总结】彻底解决跨域问题(4种)

前言:很多情况会有项目和项目之间调用,有时候调用不过去,所以都会导致跨域问题,这个是我在小公司和现在这个大公司两家公司的用到的,希望能够帮助大家。在协议,域名,端口任何一个不一致都会产生跨域问题。
跨域请求:
  • 1.jsonp跨域
  • 2.httpClient工具类
  • 3.设置响应头
  • 4.使用nginx做转发网关


1.jsonp跨域

这个是我在河南历象公司当时应用到的,背景就是前台调用后台,当时是前台开发的人来渲染页面的。上个代码
<script type="text/javascript"
	src="http://www.itmayiedu.com/static/common/jquery-1.7.2.min.js?t=2017-07-27"></script>
<script type="text/javascript">
	$(document).ready(function() {
		$.ajax({
			type : "GET",
			async : false,
			url : "http://a.unionpay:8081/ajaxB",
			dataType : "jsonp",
			jsonp : "jsonpCallback",//服务端用于接收callback调用的function名的参数 
			success : function(data) {
				console.log(data);
			},
			error : function() {
				console.log(data);
			}
		});

	});
</script>

底层原理:

他主要就是根据 url + jsonp 生成一个类似于随机数,然后请求
缺点:不支持post请求


2.httpClient工具类

点击:httpClient post请求封装
缺点:效率比较慢,中间做了次转发。


3.设置响应头(推荐使用)

这个方法建议使用,没有什么缺陷,一般都是放在过滤器中的(在这里只是做一个演示)
@RestController
@SpringBootApplication
public class UserController {

   @RequestMapping("getToken")
   public String getToken(HttpServletResponse response){
       //设置跨域请求访问,参数:*代表的是所有的域名都可以访问
       response.setHeader("Access-Control-Allow-Origin","*");
       return null;
   }
}


4.使用nginx做转发网关(强烈推荐使用)

当时就是做联调,每次访问他们本地的话,比较麻烦,对接的平台比较多,然后就给测试环境的代码做了一个映射,方便其他的平台访问。
server {
    listen 80 default_server;
	#在这里拿这个访问路径为www.demo.com
    server_name  www.demo.com;  
        if ($http_Host !~* ^www.demo.com$)
        {
            return 403;
        }


    charset utf-8;

    access_log  /var/log/nginx/aaa.access.log  main;

	#如果想访问的话,只需要通过   www.demo.com/a 即可
	location ^~ /a {
        proxy_pass  http://xxxxx:8080/a/;
        proxy_redirect    off;
        proxy_set_header  X-Forwarded-For $remote_addr;
		}
	
	#如果想访问的话,只需要通过   www.demo.com/b 即可
	location ^~ /b {
        proxy_pass  http://xxxx:8080/b/;
		proxy_redirect    off;
        proxy_set_header  X-Forwarded-For $remote_addr;
		}

    error_page  404              /error/404.html;
    error_page  500 502 503 504  /error/404.html;
}

在实战中学习,在快乐中成长

你可能感兴趣的:(跨域,jsonp,响应头,HttpClient工具类,转发)