1.跨域:浏览器对于javascript的同源策略的限制 。
以下情况都属于跨域
1)域名不同 `www.jd.com`与`www.taobao.com`
2)域名相同,端口不同 `www.jd.com:8080`与`www.jd.com:8081`
3)二级域名不同 `item.jd.com`与`miaosha.jd.com`
4)协议不同 http和https
如果**域名和端口都相同,但是请求路径不同**,不属于跨域,如:
`www.jd.com/item`
`www.jd.com/goods`
而我们刚才是从`manage.leyou.com`(浏览器页面)去访问`api.leyou.com`(前端配置路径),这属于二级域名不同,跨域了。
跨域访问,浏览器可以正常获取数据,但是不给解析到页面。
2.为什么有跨域问题?
跨域不一定都会有跨域问题。
因为跨域问题是浏览器对于ajax请求(静态资源不会有跨域问题)的一种安全限制:**一个页面发起的ajax请求,只能是与当前页域名相同的路径**,这能有效的阻止跨站攻击。
因此:**跨域问题 是针对ajax的一种限制**。
但是这却给我们的开发带来了不便,而且在实际生产环境中,肯定会有很多台服务器之间交互,地址和端口都可能不同,怎么办?
3.解决跨域问题的方案
目前比较常用的跨域解决方案有3种:
1)Jsonp
最早的解决方案,利用script标签可以跨域的原理实现。
限制:
- 需要服务的支持
- 只能发起GET请求
2)nginx反向代理
思路是:利用nginx把跨域反向代理为不跨域,支持各种请求方式
缺点:需要在nginx进行额外配置,语义不清晰
3) CORS
规范化的跨域请求解决方案,安全可靠。
优势:
- 在服务端进行控制是否允许跨域,可自定义规则
- 支持各种请求方式
缺点:
- 会产生额外的请求
我们这里会采用cors的跨域方案。