目录
前言
同源策略是由Netscape公司于1995年引入浏览器的重要的安全策略。目前,所有支持JavaScript的浏览器都实行这个政策。
它用于限制一个origin的文档或者它加载的脚本如何能与另一个源的资源进行交互。它能帮助阻隔恶意文档,减少可能被攻击的媒介。
一、同源的含义
所谓同源,就是指请求的资源和目前文件来源,有三个相同:
- 协议相同
- 端口号相同
- 域名相同
举个例子,网址:http://www.company.com/dir/page.html ,它的协议是http://,域名是www.company.com ,端口是80(在没有指定端口号时,默认端口号是80)。下表是与该网址的源进行对比的示例:
URL | 结果 | 原因 |
同源 | 只有路径不同 | |
同源 | 只有路径不同 | |
非同源 | 协议不同 | |
非同源 | 端口号不同 | |
非同源 | 域名不同 |
注:IE未将 端口号 加入到同源策略的组成部分之中
补充:
URL由三部分组成:协议类型、主机名和路径及文件名。
一般地址格式排列为(带[]的为可选项):protocol://hostname[:name]/path/[;parameters][?query][#fragment]
- protocol(协议):指定的传输协议。
- hostname(主机名):是指存放资源的服务器域名系统(DNS)主机名或IP地址。
- port(端口号):整数,可选项,省略时使用方案的默认端口,各种传输协议都有默认的端口号,如http的默认端口号是80。
- path(路径):由零或多个 "/" 符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。
- ;parameters(参数):是用于指定特殊参数的可选项。
- ?query(查询):可选项,用于给动态网页传递参数,可有多个参数,用 "&" 符号隔开,每个参数的名和值用 "=" 符号隔开。
- fragment:信息片段,可选项,字符串,用于指定网络资源中的片段。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。
二、同源策略的目的
在浏览器中,保证访问数据安全的基础就是同源策略。同源策略的目的是保证用户信息的安全,防止恶意的网站窃取数据。
如果非同源,有以下三种行为受到限制:
- Cookie、LoaclStirage和IndexDB无法读取;
- 为了防止恶意网站通过js获取用户其他网站的cookie。
- DOM无法获得;
- 因为恶意网站可以通过iframe打卡银行界面,如果可以获取DOM就相当于可以获取整个银行界面的信息。
- AJAX请求不能发送。
- 更加准确地说是跨域请求能发出去,服务器端能收到请求并正常返回结果,但是结果被浏览器拦截了。
总结
从上面可以看出,同源策略确实可以说是网络安全的基础。但是我们完成前后端分离的项目时,也因为浏览器同源策略的限制,导致我们在不同源之间通信,出现了浏览器接收不到服务端返回数据的问题,因此,还需要学习解决跨域的方法,在之后的文章中再来一起学习。