
一个 URL 有三部分组成:协议、域名(指向主机)、端口,只有这三个完全相同的 URL 才能称之为同源。如下,能和 http://www.example.com/dir/index.html 同源的是?
| URL | 结果 | 原因 |
| ---------------------------------------- | ------ | ---------------------------------- |
| `http://www.example.com/dir2/other.html` | 同源 | 只有路径不同 |
| `https://www.example.com/secure.html` | 不同源 | 协议不同 |
| `http://www.example.com:81/dir/etc.html` | 不同源 | 端口不同 ( `http://` 默认端口是80) |
| `http://news.example.com/dir/other.html` | 不同源 | 域名不同 |可以通过设置 document.domain,让子域名和父域名通过同源策略的检测。
// 1、子域名下面的页面
http://store.company.com/dir/other.html
// 2、脚本代码中修改
document.domain = "company.com";
// 3、再去访问父域名下面的页面,可以不被跨域拦截
fetch("http://company.com/dir/page.html")备注:但是如果端口不是默认80,也会失败,因为 document.domain = "company.com"; 会把端口设置为 null
跨域访问的解决方案是 CORS,详情,看这里!
跨域访问也可以通过 window.postMessage 来实现,不过不太推荐,很容易造成安全问题。window.postMessage - 详细用法说明!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。