1.跨域问题的产生
因为浏览器的同源策略所以产生了跨域。同源策略要求通过js(ajax)访问的时候,URL中的协议、域名(IP地址)、端口号都不允许发生变化。如果三者有一个变化,则不允许返回数据,认为这个请求不安全,浏览器禁止接收数据。
2.同源策略的作用
同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。
设想这样一种情况:A网站是一家银行,用户登录以后,又去浏览其他网站。如果其他网站可以读取A网站的Cookie,会发生什么?
很显然,如果Cookie包含隐私(比如存款总额),这些信息就会泄漏。更可怕的是,Cookie往往用来保存用户的登录状态,如果用户没有退出登录,其他网站就可以冒充用户,为所欲为。因为浏览器同时还规定,提交表单不受同源政策的限制。
由此可见,"同源政策"是必需的,否则 Cookie 可以共享,互联网就毫无安全可言了。
同源策略限制以下几种行为:
- Cookie、LocalStorage 和 IndexDB 无法读取
- DOM 和 Js对象无法获得
- AJAX 请求不能发送
3.跨域的解决
服务器端
方式一:
//请求的Controller中加入,处理跨域请求
//设置可以访问的域,此方法不需要操作Cookie
response.setHeader("Access-Control-Allow-Origin", "http://localhost:9005");
//设置跨域请求允许携带Cookie
response.setHeader("Access-Control-Allow-Credentials", "true");
方式二:
//使用Spring提供的注解,处理跨域请求,需要Spring4.2或以上版本,allowCredentials属
性默认为true,可以省略不写
@CrossOrigin(origins="http://localhost:8088",allowCredentials="true")
@RequestMapping("/addGoodsToCartList")
public Result addGoodsToCartList(Long itemId, Integer num) {
...
}