1. 同源策略是什么?
浏览器出于安全方面的考虑,只允许与本域下的接口进行交互。不同源的客户端脚本在没有明确的授权的情况下,不能读写对方的资源,此为同源策略。
本域指的是以下三个方面
- 同协议:如都是http开头的网址,或者https。
- 同域名:如都是http://www.baidu.com/a和http://www.baidu.com/b
- 同端口:如都是80端口
2. 为何跨域?
因为浏览器的同源策略阻止不同域的接口数据交互,实现安全,但在实际运用中,有时需要不同域的资源进行交互处理,从而引发跨域解决数据交互问题。
3. 跨域的实现方式有几种?
3.1 JSONP
html中的script标签可以引入其他域下的js,基于此特性,我们可以实现跨域的访问接口。
- 在html文件中写好回调函数callback
- 在后台服务器中写好返回的回调函数名+参数
- html文件收到后台服务器返回内容按js执行,执行带参数的callback。返回的带参callback从而实现了跨域数据交互。
详细实现见github中json文件夹。
3.2 CORS
CORS是支持AJAX的“正规军”,在浏览器同源策略的同时,当发出不同源的请求时,会给发送的请求会送时,加个响应头Access-Control-Allow-Origin,凡是请求端地址在Access-Control-Allow-Origin的值内的,则可以解析响应,实现跨域数据交互。
Access-Control-Allow-Origin
详细实现见github中cors文件夹。
3.3 降域
降域顾名思义,就是把域名类似的两个html的domain设为同一个,例如:
- a.jrg.com
- b.jrg.com
均在页面也添加下行代码,从而实现降域,可以访问iframe内的跨域的数据,进行交互。
document.domain = 'jrg.com'
详细实现见github中降域文件夹。
3.4 postMessage
postMessage机制不同于上边几种,它是通过在一端发送message消息,另一端监听message消息,从而获得数据交互。通过监听message和发送message,实现跨域数据交互。
详细实现见github中postMessage文件夹。
网友评论