web中如何解决跨域的问题-创新互联

这篇文章主要为大家展示了“web中如何解决跨域的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“web中如何解决跨域的问题”这篇文章吧。

创新互联是一家专业提供鹰手营子企业网站建设,专注与成都网站建设、成都网站设计、H5高端网站建设、小程序制作等业务。10年已为鹰手营子众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。

什么是跨域?

概念如下:只要协议、域名、端口有任何一个不同,都被当作是不同的域

下面是具体的跨域情况详解

URL说明是否允许通信
http://www.a.com/a.js、http://www.a.com/b.js同一域名下允许
http://www.a.com/lab/a.js、http://www.a.com/script/b.js同一域名下不同文件夹允许
http://www.a.com:8000/a.js、http://www.a.com/b.js同一域名,不同端口不允许
http://www.a.com/a.js、https://www.a.com/b.js同一域名,不同协议不允许
http://www.a.com/a.js、http://70.32.92.74/b.js域名和域名对应ip不允许
http://www.a.com/a.js、http://script.a.com/b.js主域相同,子域不同不允许(cookie这种情况下也不允许访问)
http://www.a.com/a.js、http://a.com/b.js同一域名,不同二级域名(同上)不允许(cookie这种情况下也不允许访问)
http://www.cnblogs.com/a.js、http://www.a.com/b.js不同域名不允许

一、document.domain跨域

原理:相同主域名不同子域名下的页面,可以设置document.domain让它们同域

限制:同域document提供的是页面间的互操作,需要载入iframe页面

下面几个域名下的页面都是可以通过document.domain跨域互操作的: http://a.com/foo, http://b.a.com/bar, http://c.a.com/bar。 但只能以页面嵌套的方式来进行页面互操作,比如常见的iframe方式就可以完成页面嵌套

// URL http://a.com/foo
var ifr = document.createElement('iframe');
ifr.src = 'http://b.a.com/bar'; 
ifr.onload = function(){
    var ifrdoc = ifr.contentDocument || ifr.contentWindow.document;
    ifrdoc.getElementsById("foo").innerHTML);
};
ifr.style.display = 'none';
document.body.appendChild(ifr);

上述代码所在的URL是http://a.com/foo,它对http://b.a.com/bar的DOM访问要求后者将 document.domain往上设置一级

// URL http://b.a.com/bar
document.domain = 'a.com'

document.domain只能从子域设置到主域,往下设置以及往其他域名设置都是不允许的, 在Chrome中给出的错误是这样的

Uncaught DOMException: Failed to set the 'domain' property on 'Document': 'baidu.com' is not a suffix of 'b.a.com'

二、有src的标签

原理:所有具有src属性的HTML标签都是可以跨域的,包括,