共计 1557 个字符,预计需要花费 4 分钟才能阅读完成。
什么是跨域
JavaScript 出于安全方面的考虑,不允许跨域调用其他页面的对象。但在安全限制的同时也给注入 iframe 或是 ajax 应用上带来了不少麻烦。这里把涉及到跨域的一些问题简单地整理一下:
首先什么是跨域,简单地理解就是因为 JavaScript 同源策略的限制,a.com 域名下的 js 无法操作 b.com 或是 c.a.com 域名下的对象。更详细的说明可以看下表:
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 |
主域相同,子域不同 | 不允许 |
http://www.a.com/a.js http://a.com/b.js |
同一域名,不同二级域名(同上) | 不允许(cookie 这种情况下也不允许访问) |
http://www.cnblogs.com/a.js http://www.a.com/b.js |
不同域名 | 不允许 |
- 特别注意两点:
- 第一,如果是协议和端口造成的跨域问题“前台”是无能为力的,
- 第二:在跨域问题上,域仅仅是通过“URL 的首部”来识别而不会去尝试判断相同的 ip 地址对应着两个域或两个域是否在同一个 ip 上。
“URL 的首部”指 window.location.protocol +window.location.host,也可以理解为“Domains, protocols and ports must match”。
<!--more-->
以上抄自 cnblog.
正文:
本文作者在使用百度 Ueditor 时,
由于加载 js 时使用的是二级域名.
如果只是加载 Js 当然没有问题,
但是 ue 点击图片或者上传图片会在页面生成一个 iframe......
额,这时候 chrome 的 console 会告诉你,跨域了.
先解释下什么叫主域名(顶级域名)
www.liuhuawei.com
liuhuawei.com 便是顶级域名
www.liuhuawei.com 二级域名.
解决方案,在需要解决跨域的顶部,声明共有的顶级域名.
[java]document.domain = 'a.com';[/java]
PHP 设置
[php]
header('Access-Control-Allow-Origin: http://yunjuzhu.com'); // 设置 http://www.baidu.com 允许跨域访问
header('Access-Control-Allow-Headers: X-Requested-With,X_Requested_With'); // 设置允许的跨域 header
[/php]
这里需要注意的是.'Access-Control-Allow-Origin': 这里是来源地址.
比如从 a.com 请求到 b.com,那么 b.com 页面需要写上 'Access-Control-Allow-Origin':a.com
如果你不知道怎么写,打开调试工具,抓请求,找到请求头下的 Origin,
后面的地址即是.
不过当我想在被调用 js 里面使用调用页面的 window 全局变量,就会获取不到,
不能实现同步更新,因为本地和线上域名不一致,只能委屈本地,不支持线上了