什么是同源
简单来说,当两个URL的协议、域名、端口号完全一致时,那么两个URL为同源。
来看一下URL的组成部分:
- http:// --> 协议
- www --> 子域名
- hahaha.com --> 主域名
- 80 --> 端口(http:// 默认端口是80)
- abc/a.js --> 请求资源路径
什么是跨域
当协议、子域名、主域名、端口号中任意一个不相同时,都算作不同域。跨域的意思是不同域名之间互相请求资源即算作跨域。
CORS 跨域
在同源策略的安全保护下网页之间是不允许跨域的,而CORS则是跨域的方法之一。
CORS方法只用在服务端设置 Access-Control-Allow-Origin就可以开启 CORS。 该属性表示哪些域名可以访问资源,如果设置通配符则表示所有网站都可以访问资源。
CORS分为简单请求与复杂请求,具体可以参考MDN文档:developer.mozilla.org/zh-CN/docs/…
JSONP 跨域
JSONP也是跨域的方式之一,当CORS方法使用不了的时候,比如IE浏览器跨域,我们就可以使用JSONP。
JSONP的原理:
利用 <script> 标签没有跨域限制的漏洞,网页可以得到从其他来源动态产生的 JSON 数据。JSONP请求一定需要对方的服务器做支持才可以。
JSONP的实现:
-
声明一个回调函数,其函数名(如xxx)当做参数值,要传递给跨域请求数据的服务器,函数形参为要获取目标数据(服务器返回的data)。
-
创建一个
<script>标签,把那个跨域的API数据接口地址,赋值给script的src,还要在这个地址中向服务器传递该函数名。 -
服务器接收到请求后:把传递进来的函数名和它需要给你的数据拼接成一个字符串。
-
最后服务器把准备的数据通过HTTP协议返回给客户端,客户端再调用执行之前声明的回调函数(xxx),对返回的数据进行操作。