浏览器对于js的同源策略的限制,例如a.cn下面的js不能调用b.cn下的js数据
同源的概念又是什么呢:简单解释:相同域名,端口相同,协议也相同。
同源策略:必须与浏览器上的url地址处于同域上,也就是域名,端口协议都相同
比如我位于study.cn 去请求www.baidu.com上的资源,就不行。
同源策略的保护,若没有,那么一些重要的机密网站就会很危险。
jsonp 全称是json padding,是为了解决跨域请求资源而产生的解决方案,是一种依靠开发人员创造出的非官方的跨域数据原则,
json返回的是一串数据,JSONP返回的是脚本代码(包含函数的调用)
JSONP只支持get请求,不支持post请求
(类似往页面添加一个script标签,通过src属性去触发对指定地址的请求,故只能是get jsonp将传递一个callback参数给客户端,
随后服务端返回数据时将这个callback参数作为函数包裹住json数据,返回给客户端。
https://blog.csdn.net/hansexploration/article/details/80314948
2 后端修改header
header(‘Access-Control-Allow-Origin:*’);//允许所有来源访问
header(‘Access-Control-Allow-Method:POST,GET’);//允许访问的方式
3 nginx做反向代理
www.baidu.com 下调用www.sina.com拿到返回值,载进行返回
4 修改document.domain
不同的window之间不能访问 只能适用于主域相同子域不同的情况。
document.domain 只能设置成自身或更高一级的域
a.b.example.com中某个文档的document.domain可以设成a.b.example.com、b.example.com 、example.com中的任意一个,但是不可以设成c.a.b.example.com,因为这是当前域的子域,也不可以设成baidu.com,因为主域已经不相同了。
兼容性:所有浏览器都支持;
优点:
可以实现不同window之间的相互访问和操作;
缺点:
只适用于父子window之间的通信,不能用于xhr;
只能在主域相同且子域不同的情况下使用;
5.window.name
关键点:window.name在页面的生命周期里共享一个window.name;
兼容性:所有浏览器都支持;
缺点:
大小限制:window.name最大size是2M左右,不同浏览器中会有不同约定;
安全性:当前页面所有window都可以修改,很不安全;
6 使用postMessage功能
是h5新引入的概念,我们可以通过window.postMessage的方式进行使用,并可以监听其发送的消息;
兼容性:移动端可以放心用,但是pc端需要做降级处理
优点
不需要后端介入就可以做到跨域,一个函数外加两个参数(请求url,发送数据)就可以搞定;
移动端兼容性好;
https://blog.csdn.net/tjcjava/article/details/76468225
还需进一步做整理。