什么是跨域
不同协议 不同域名 不同子域 不同端口 均为跨域
特别的:一个域名和其对应的ip地址也算跨域
具体见下表
跨域请求无效
默认情况下,比如在localhost:63342下使用ajax请求localhost:8800
$.get("http://localhost:8080/api/getProducts")
会发生错误:
XMLHttpRequest cannot load http://www.baidu.com/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access.
解决方案
只介绍一种解决方案
在http Response header中加入“Access-Control-Allow-Origin”字段,其值设置为发起请求的域名;或者*,表示所有域名都可以跨域对此域名进行访问
函数参数中加入HttpServletResponse
调用其setHeader函数,在header中加入相应字段
代码如下
@ResponseBody
@RequestMapping(value={"api/getproducts.json"})
public String getProducts(HttpServletResponse responce){
responce.setHeader("Access-Control-Allow-Origin","*");
return JSON.toJSONString(productService.findAllProducts());
}
还有其他解决方案,比如使用jsonp,在此不做介绍