ajax跨域请求(SpringMVC)

什么是跨域

不同协议 不同域名 不同子域 不同端口 均为跨域
特别的:一个域名和其对应的ip地址也算跨域
具体见下表


ajax跨域请求(SpringMVC)_第1张图片

跨域请求无效

默认情况下,比如在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,在此不做介绍

你可能感兴趣的:(ajax跨域请求(SpringMVC))