同源策略
要理解跨域,首先要知道同源策略。所谓同源策略:是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少同源策略,则浏览器的正常功能可能受到影响。可以说,WEB是构建在同源策略上的。
同源:如果两个URL的域名、协议、端口相同,则表示它们同源。
浏览器的同源策略,限制了来自
不同源的"文档"或脚本对
当前文档读取或设置属性。也就是其它源的文档或脚本不能对当前文档进行设置属性和读取操作。根据这个策略,a.com域名下的JavaScript无法跨域操作b.com域名下的对象。比如:baidu.com域名下的页面中包含的JavaScript代码不能访问Google.com域名下的页面内容。
同源策略在现实生活中是十分重要的。比如:假设攻击者利用iframe把真正的银行登录页面嵌到自己的页面上,当用户使用真正的用户名、密码登录时,该页面的JavaScript会读取用户表单中的内容,这是不安全的。
在浏览器中,<script>、<link>、<img>、<iframe>等标签都可以加载跨域资源,不受同源策略限制。但是通过"
src"加载的资源,浏览器限制了JavaScript的权限、不能进行任何的读写操作。从而,即使请求成功了,数据回来了也是取不到的。
一些浏览器窗口和标签之间都是完全相互独立的,在
其中一个窗口或者标签运行的代码在
其它窗口或标签中是完全无法识别的。但在一些情况下,当脚本打开一个新窗口或者在嵌套的窗体中运行的时候,多个窗口之间、窗体之间是可识别的。如果
它们的文档是在同一个WEB服务器下,那么各个窗口中的脚本是可以相互交互和相互操作对方的页面的。