同源策略、跨域

同源策略

1、什么是源

以下面这段代码为例

|http://www.iconfont.cn:80/home/index?spm=a313x.7781069.1998910419.2
  • http:// 是协议名
  • www.iconfont.cn 是域名
  • 80 是端口号,默认情况下不显示,https协议下默认端口号是43,ftp协议下默认端口号是21
  • /home/index 是带层次的文件路径
  • spm=a313x.7781069.1998910419.2 是查询字符段
  • 源(origin)就是指协议、域名、端口号

2、什么是同源

  • 即地址里的协议、域名和端口号都相同,则属于同源

http://abc.efg.com/h/index.html为例做同源检测有下表

url 结果 原因
http://abc.efg.com/h/demo.html 成功
http://abc.efg.com/j/index.html 成功
https://abc.efg.com/h/index.html 失败 协议不相同
http://abc.efg.cn/h/index.html 失败 域名不相同
http://abc.efg.com:8080/h/index.html 失败 端口不相同

什么是同源策略

同源策略是一种约定,是浏览器最核心也是最基本的安全功能,主要体现在同源策略会限制来自不同源的文档和脚本对当前源的文档数据的读取或设置某些属性,是用于隔离潜在恶意文件的重要安全机制

同源策略控制了不同源的交互,主要有三类交互

  • 跨域写:通常允许,比如链接重定向表单提交(因为表单提交不需要反馈数据)
  • 跨域资源嵌入:通常允许,下面会给出跨域资源嵌入的例子
  • 跨域读:通常不允许,比如在使用XMLHttpRequest的时候会发生跨域问题,不过通过某些方法仍可以进行跨域读

注意:IE是例外

在同源策略中,Internet Explorer有两点不同

  • 授信范围(Trust Zones):两个相互之间高度互信的域名,如公司域名 (corporate domains),不遵守同源策略的限制。
  • 端口:未将端口号加入到同源策略的组成部分之中,因此 http://abc.com:81/index.htmlhttp://abc.com/index.html 属于同源并且不受任何限制。

跨域

浏览器同源策略的机制的存在无法避免,而我们实际应用中又不可避免的对于不同域要操作,那我们就只能跨域了

如何跨域

  • 降域 document.domain
http://a.bcd.com/index.html
http://b.bcd.com/index.html

上面两个url虽然有个共同的bcd.com的一级域名,二级域名却不一样,这样的话同源策略也一样不认为它俩是同源,对于这种情况,我们可以将两个页面都设置document.domain='bcd.com',这样的话两个页面都可以互相访问

  • 这个方式的特点

    • 只能在父域名与子域名之间使用,且将 域名设置为bcd.com后,不能再设置为原先的域名。
    • 存在安全性问题,当一个站点被攻击后,另一个站点会引起安全漏洞。
    • 这种方法只适用于 Cookieiframe 窗口。
  • JSONP跨域
    JSONP和JSON并没什么关系
    我们要知道一个概念即

你可能感兴趣的:(同源策略、跨域)