前言:很多情况会有项目和项目之间调用,有时候调用不过去,所以都会导致跨域问题,这个是我在小公司和现在这个大公司两家公司的用到的,希望能够帮助大家。在协议,域名,端口任何一个不一致都会产生跨域问题。
跨域请求:
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;
}
在实战中学习,在快乐中成长