接下来要讲的是 JavaScript中的跨域 这个奇葩的问题,很多人在面试的时候也是被闻到自闭的问题。我会从下面三个方面去讲
1.什么是跨域?
跨域:跨域是指从一个域名的网页去请求另一个域名的资源。比如:从 www.baidu.com 这个域名去访问 www.taobao.com这个域名下数据,正常请求的情况下是失败的,失败的原因就是就 跨域请求了,它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。
跨域的严格一点的定义是:只要 协议,域名,端口有任何一个的不同,就被当作是跨域
2.什么是同源策略?
同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,所谓同源是指,域名,协议,端口相同。
如果非同源(域名,协议,端口只要有其中一个不相同就是非同源),那么在请求数据时,浏览器会在控制台中报一个异常,提示拒绝访问。
- 非同源受到的限制
- cookie不能读取 (如我在自己的站点无法读取博客园用户的cookie)
- dom无法获得
- ajax请求不能发送
3.为什么要跨域请求数据
既然有安全问题,那为什么又要跨域呢? 有时公司内部有多个不同的子域,比如一个是A域 ,而应用是放在B域 , 这时想从 B域去访问 A域的资源就属于跨域。