同源策略指的是三个相同

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

如https://www.baidu.com/hahah.html这个网址来说 https是使用的协议,www.baidu.com是域名,端口号默认是80(不指定端口默认是80端口);

所以:

  1. www.baidu.com/hehe.html 同源
  2. www.baidu.com/heihei/houhou.html 同源
  3. www.i71.com/haha.html  域名不同,不同源
  4. www.baidu.com:888/haha.html   端口不同,不同源

为什么需要同源策略

  同源策略其实是一种浏览器安全的功能,保护着每个网站数据的安全的同时又维持着js脚本的正常执行;假设现在两个网页,百度和谷歌的,两个网页都会加载各自的js脚本或者添加cookie等等,同源策略就是维持这些数据和脚本的有序访问;百度网页的脚本不能访问谷歌网页的脚本,当然各自的cookie数据也只能各家的js 脚本才能访问;

ps:    如果非同源,那么以下的行为将会受到限制;1,cookie,localStorage 2,ajax 

需要跨域取数据怎么办(多个服务器,或者二级域名)

1.利用cookie设置document.domain (解决二级域名不同)

  比如www.baidu.com和news.baidu.com这两个不同的域名,要想让两者之间的数据能够互相访问,可以将数据存储在cookie里面并指定

document.domain="baidu.com";

2 命名锚点(www.aaa.com#tag)(解决嵌套窗口)

  要利用这个呢,就得说说的网站url,在js中如何存储这些信息来让我们访问呢?——window.location 以我现在编辑文章的界面来说:

这个就是window.location对象,location.hash里面存放的是#tag,也就是锚点名;(当然了,除此之外还有很多其他有用的属性,host,href,origin,pathname(查询路径),search(查询字符串));

所以,现在添加一个锚点,location.hash="lla";

页面url已经改变,当然这时候嵌套的子窗口也能访问到我添加的这个lla名称了,达到了传值得目的,那么问题来了,为什么不用查询字符串?xxx=xxx;这个来传值呢,首先锚点不会刷新页面,如果你改变了location.search(或者host,href啊)都会触发页面的刷新行为,什么,,,你竟然不信??

果断选择留下来;信了就好;

那么子窗口如何获得这个事件的改变;window.haschange

1 window.hanschange=function(){
2     var tag=window.location.hash;3 }

同样的子窗口也可以改变这个tag;parent.location.hash=XXX;

3,正经做法,html5给了解决这个问题的API了

windw.postMessage看名字就很有感觉,post,恩,看来蛮安全的吗;所以有了这个方式,不管两个网页是不是同源,都可以愉快的好好沟通了

MDN上面给的解释是:

The Window.postMessage() method safely enables cross-origin communication. Normally, scripts on different pages are allowed to access each other if and only if the pages that executed them are at locations with the same protocol (usually both https), port number (443 being the default for https), and host (modulo Document.domain being set by both pages to the same value). window.postMessage() provides a controlled mechanism to circumvent this restriction in a way which is secure when properly used.

那么如何使用?

  发送端:

  接受端:

      

不多逼逼;window.postMessage的MDN详细资料:https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

ps:postMessage我还没有实战经验,有实战经验放demo,不过讲道理控制台应该也能实现这个demo;有弄再补写

-----------------------------------------------------------------------2017-4-11----------------------------------------------------------------------------------------------

在搜狗页面:

用window.open打开百度界面,在这个打开的页面里面添加message监听:

接下来从搜狗页面向百度发送字符串消息:

查看百度页面输出的数据:

成功!e.origin指向了搜狗页面的网址;

这是字符串数据;然后测试下其他类型;

查看结果:

没问题,安心用吧;

转载于:https://www.cnblogs.com/llauser/p/6690867.html

前端开发必须说的那些事之——同源策略(same origin policy)相关推荐

  1. 十秒解决开发环境跨域问题——取消浏览器同源策略

    解决开发环境跨域问题方法有很多,设置代理什么的略显繁琐:接下来介绍一个十秒解决开发环境跨域问题的方法--取消浏览器同源策,解决所有跨域问题,以谷歌浏览器为例. 一:Windows ①:关闭浏览器 ②: ...

  2. 前端开发~uni-app ·[项目-仿糗事百科] 学习笔记 ·009【搜索页开发】

    注:前言.目录见 https://god-excious.blog.csdn.net/article/details/105312456 文章目录 [035]搜索页开发(上) 开发内容 具体方法 核心 ...

  3. 前端开发~uni-app ·[项目-仿糗事百科] 学习笔记 ·008【首页开发】

    注:前言.目录见 https://god-excious.blog.csdn.net/article/details/105312456 文章目录 [024]page-json配置 [025]图文.视 ...

  4. 前端开发~uni-app ·[项目-仿糗事百科] 学习笔记 ·006【底部导航开发】

    注:前言.目录见 https://god-excious.blog.csdn.net/article/details/105312456 文章目录 [013]底部导航开发 [013]底部导航开发 官方 ...

  5. 前端开发~uni-app ·[项目-仿糗事百科] 学习笔记 ·000【前言】

    前言 本系列笔记,基于曾经的网易云课堂上一个"uni-app仿糗事百科"开发的课程,课程的资源来自网络. 我仅做一些笔记,来记录学习的一些收获. 前8节课讲的都是一些软件的基础使用 ...

  6. 准备.Net转前端开发-WPF界面框架那些事,UI快速实现法

    题外话 打开博客园,查看首页左栏的"推荐博客",排名前五的博客分别是(此处非广告):Artech.小坦克.圣殿骑士.腾飞(Jesse).数据之巅.再看看它们博客的最新更新时间:Ar ...

  7. 前端开发~uni-app ·[项目-仿糗事百科] 学习笔记 ·005【设置全局属性globalStyle】

    注:前言.目录见 https://god-excious.blog.csdn.net/article/details/105312456 文章目录 [012]设置全局样式globestyle [012 ...

  8. 前端开发~uni-app ·[项目-仿糗事百科] 学习笔记 ·007【uni-app和vue.js基础快速上手】

    注:前言.目录见 https://god-excious.blog.csdn.net/article/details/105312456 文章目录 [014]view和text组件和动画使用 常见的尺 ...

  9. 前端开发~uni-app ·[项目-仿糗事百科] 学习笔记 ·004【App.vue引入全局公共样式】

    注:前言.目录见 https://god-excious.blog.csdn.net/article/details/105312456 文章目录 [009]引入官方CSS样式库 [010]引入第三方 ...

最新文章

  1. ACMNO.17C语言-筛法求素数 用筛法求之N内的素数。
  2. python编写星号菱形中间是空的_简单空实心图形打印|Python练习系列[3]
  3. 基于相似学习的目标跟踪方法
  4. 云合影程序_活动回顾丨阿里云ACE同城会开发者云workshop圆满落幕
  5. servlet 认证,授权
  6. SOFA 源码分析 — 连接管理器
  7. Ubuntu服务器安装snmpd(用于监控宝)
  8. CUBA 7.2 –有什么新功能?
  9. js笔记(二)数组、对象、this
  10. c语言局限性,C语言陷阱与缺陷.pdf
  11. Java并发编程实战 第14章 构建自定义的同步工具
  12. android studio sqlitedatabase,在SQLite数据库Android Studio上使用预填充数据库
  13. java实现把数据写入到Excel并下载
  14. Windows Terminal 已上架,快尝鲜
  15. 启动的时候闪退_APP突然闪退怎么办?学会这五个妙招比换手机实用,看完望周知...
  16. 20200331:每日温度(leetcode739)
  17. ERNIE 3.0 | 刷榜了!60多项任务取得最好效果
  18. WebStart啟動程式在關閉時關閉javaw進程
  19. 2008评估过期 server sql_SQLServer2008R2数据库评估版已经过期解决办法.doc
  20. [VulnStack] ATTCK实战系列—红队实战(二)

热门文章

  1. 晨哥真有料丨等女神分了我上位!
  2. centos mate桌面_CENTOS7安装各种桌面系统 CENTOS安装桌面图形化GUI GNOME/KDE/Cinnamon/MATE/Xfce...
  3. KubeEdge 初测
  4. php 类 和 函数,PHP函数和类
  5. 95-10-150-启动-FetchManager
  6. 【es】ClassNotFoundException: org.elasticsearch.plugins.ExtendedPluginsClassLoader
  7. 【ElasticSearch】ElasticSearch immense term错误
  8. Mac更新之后使用终端提示:The default interactive shell is now zsh.
  9. 【安全】安装phpLDAPadmin管理LDAP
  10. Java中的访问修饰符详解