最近做项目,遇到跨域问题,网上百度了一下,大致有三种方式解决:
1、使用jsonp:
缺点是只能支持GET方法,不推荐;
2、使用跨域浏览器:https://www.cnblogs.com/laden666666/p/5544572.html
缺点是客户量大的时候不可能每台客户机上的浏览器都去设置,不推荐(自己测试时可使用);
3、使用代理:
原理就是绕过浏览器端,具体如何操作还不太清楚,不推荐;
4、在后端(java、php)加上请求头:
我使用的是SpringMVC4.0.2,具体操作如下:
a.在后端方法中加入
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "GET,POST");
b.前端使用ajax:
可以解决跨域,但有小问题:
使用contentType: "application/json"传输,只能把参数放置在url中进行传输,不能把参数放在data:{}中,放在data中实际传参是把参数放到了request payload中,后台request.getParameter()取不到参数,不知道为啥,具体取值很复杂:http://blog.csdn.net/your_heart_private/article/details/71436210;
所以只能把参数放在url中进行传输。
若为SpringMVC4.2+,框架中提供跨域标签:https://www.cnblogs.com/cielosun/p/6741307.html,未测试过。
若上述方法进行还是不能解决跨域,检查前端html头:
<meta http-equiv="Access-Control-Allow-Origin" content="*">
<meta http-equiv="content-security-policy">