个人对跨域的理解

什么是跨域?

跨域是指浏览器不能再执行其他网站的脚本。它是由浏览器同源策略造成的,是浏览器施加的安全限制。

同源是指:域名(domain)、协议(protocol)、端口(port)。

URI  说明  是否跨域 

http://www.LuckyFBB.com/a.js

http://www.Lucky.cm/b.js 

不同域名  是

http://www.LuckyFBB.com/src/a.js

http://www.Lucky.cm/script/b.js

同域名下不同文件

http://www.LuckyFBB.com:8080/a.js

http://www.Lucky.cm/b.js

同域名下不同端口

http://www.LuckyFBB.com/a.js

https://www.LuckyFBB.com/b.js

同域名下不同协议

http://www.LuckyFBB.com/a.js

http:/80.90.10.75/b.js

域名和域名对应的ip

http://www.LuckyFBB.com/a.js

http://script.LuckyFBB.com/b.js

主域名相同 子域名不同

http://www.LuckyFBB.com/a.js

https://LuckyFBB.com/b.js

同一域名,不同二级域名

如果非同源就会受到以下限制:

  • cookie无法读取
  • dom无法获得
  • ajax请求不能发送

如何解决?

JSONP

    JSONP是指JSON Padding,JSONP是一种非官方跨域数据交换协议,由于script的src属性可以跨域请求,所以JSONP利用的就是浏览器的这个'漏洞',需要通信时,动态插入一个script标签。请求地址一般带有一个callback参数。

    JSONP虽然简单易用,但是只能进行get请求

window.name

        window.name的美妙之处:name值在不同的页面(甚至不同域名)加载后依旧存在,并且可以支持非常长的name值。

window.postMessage

    window.postMessage是一个安全的跨源通信的方法。一般情况下,当且仅当执行脚本的页面是相同协议(通常是http)、相同端口(http默认使用80端口)和相同的host(两个页面的document.domain的值相同)时,才允许同业面上的脚本互相访问。




猜你喜欢

转载自blog.csdn.net/luckyfbb/article/details/80058310