2.1同源策略

1. 概述

1.1 含义

1995年,同源政策由 Netscape 公司引入浏览器。目前,所有浏览器都实行这个策略。
同源策略是指:如果两个 URL 的 protocolhostport (如果有指定的话)都相同的话,则这两个 URL 是同源。
举例来说:http://www.example.com/index.html,在这个URL中 协议(protocol)是http域名是www.example.com端口是80(http协议默认端口)

下表给出了与 URL http://www.example.com/index.html 的源进行对比的示例:

URL结果原因
http://www.example.com/src/one.html同源协议、域名、端口均相同
https://www.example.com/two.html不同源协议不同
http://www.complex.com/three.html不同源域名不同
http://www.example.com:81/four.html不同源端口不同

1.2 目的

同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。
浏览器的同源策略,限制了来自不同源的“document ” 1 或脚本,对当前“document”读取或设置某些属性。

同源策略极其重要,试想如果没有同源策略,可能 a.com 的一段 JavaScript 脚本,在 b.com 未曾加载此脚本时,也可以随意涂改 b.com 的页面(在浏览器的显示中)。为了不让浏览器的页面行为发生混乱,浏览器提出了“Origin”(源)这一概念,来自不同 Origin的对象无法互相干扰。

1.3 限制范围

随着互联网的发展,"同源政策"越来越严格。目前,如果非同源,共有三种行为受到限制。

  • Cookie、LocalStorage 和 IndexDB 无法读取。
  • DOM 无法获得。
  • AJAX 请求不能发送(可以发送,但浏览器会拒绝接受响应)。

2. 进阶

2.1 JavaScript 的源( Origin )

对于当前页面来说,页面存放 JavaScript 文件的域并不重要,重要的是加载 JavaScript 页面所在的域是什么。
例如:
a.com通过以下代码:

<script src=http://www.b.com/b.js></script>

加载了 b.com 上的 b.js,但是b.js是运行在 a.com 页面中的,因此相对于当前打开的页面( a.com )来说,b.js 的源就应该是 a.com 而非 b.com。

2.2 XMLHttpRequest

2.3 其他

对于浏览器来说,除了DOM、Cookie、XMLHttpRequest 会受到同源策略的限制外,浏览器加载的一些第三方插件也有各自的同源策略。最常见的一些插件如 Flash、Java Applet、Sliverlight、Google Gears等都有自己的控制策略。
以 Flash 为例,它主要通过网站提供的 crossdomain.xml 文件判断是否允许当前 “源” 的 Flash 跨域访问目标资源。


  1. 每个载入浏览器的 HTML 文档都会成为 Document 对象。Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值