# 什么是同源策略?

1995年,同源政策由 Netscape 公司引入浏览器。目前,所有浏览器都实行这个政策。最初,它的含义是指,A网页设置的 Cookie,B网页不能打开,除非这两个网页"同源"。所谓"同源"指的是"三个相同"。

  • 协议相同
  • 域名相同
  • 端口相同

# 非同源策略有三种行为限制

  • Cookie、localStorage和indexDB 无法读取
  • DOM 无法获得
  • Ajax 无法发送

localStorage存储内存5M,超过2.5存在性能问题

# 浏览器不同的域名不能访问对应的cookie 但是内部的表单没有限制

# 如何设置同源策略(hosts)

test.xxxx.com a.html

<script>
    document.domain = 'xxxx.com'//设置同源策略
    document.cookie = 'test1=hello';
</script>

test.xxxx.com b.html

<script>
    document.cookie
</script>

注意,这种方法只适用于 Cookie 和 iframe 窗口,LocalStorage 和 IndexDB 无法通过这种方法

另外,服务器也可以在设置Cookie的时候,指定Cookie的所属域名为一级域名,比如.xxxx.com。

Set-Cookie: key=value; domain=.example.com; path=/

# 常见的解决跨域方案

img标签 iframe script jsonp(callback与后端进行约定) link(background)
# jsonp 原理
<script src="http://wwww.test.com/index.php?callback=test"></script>

<script>
function test(data){
    console.log(data)
}
</script>

php 部分
if(callback) {
    test({"data":"约定成功"})
}
# 标签拓展 测试用户网速,根据用户网速给出用户不同方案
var s = new Image()
var start = Date.now()
s.src = 'https://www.baidu.com/haha.gif'
s.onload = function() {
 var e = Date.now()
 var t = e-s
 var v = 't'+= 'kb/s'
}

# 一个html元素最少要当3个元素去使用

具体关于同源策略请浏览 阮一峰老师同源策略讲解