什么是跨域
在当前域名请求网站中,默认不允许通过ajax请求发送起其他域名。
解决方案
(一)使用后台response添加header
后台response添加header,response.setHeader("Access-Control-Allow-Origin", "*"); 支持所有网站
(二)使用jsonp(只支持get请求,不支持get请求)
前端代码:
$.ajax({
type : "POST",
async : false,
url : "http://a.a.com/a/FromUserServlet?userName=张三",
dataType : "jsonp",//数据类型为jsonp
jsonp : "jsonpCallback",//服务端用于接收callback调用的function名的参数
success : function(data) {
alert(data.result);
},
error : function() {
alert('fail');
}
});
后端代码
@WebServlet("/FromUserServlet")
public class FromUserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequestreq, HttpServletResponseresp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequestreq, HttpServletResponseresp) throws ServletException, IOException {
resp.setCharacterEncoding("UTF-8");
// resp.setHeader("Access-Control-Allow-Origin", "*");
String userName =req.getParameter("userName");
String userAge =req.getParameter("userAge");
System.out.println(userName +"----" + userAge+"---"+req.getMethod());
// JSONObject JSONObject1 = new JSONObject();
// JSONObject1.put("success", "添加成功!");
// resp.getWriter().write("callbackparam(" + JSONObject1.toJSONString()
// + ")");
try {
resp.setContentType("text/plain");
resp.setHeader("Pragma","No-cache");
resp.setHeader("Cache-Control","no-cache");
resp.setDateHeader("Expires", 0);
PrintWriter out =resp.getWriter();
JSONObject resultJSON =new JSONObject();// 根据需要拼装json
resultJSON.put("result","content");
String jsonpCallback =req.getParameter("jsonpCallback");//客户端请求参数
out.println(jsonpCallback +"(" + resultJSON.toJSONString() +")");//返回jsonp格式数据
out.flush();
out.close();
} catch (Exceptione) {
// TODO: handle exception
}
}
}
(三)使用HttpClinet内部转发
(四)使用接口网关(使用nginx转发、使用springCloud网关)